Задачи в C#: ошибка передачи функций двойного типа в качестве параметра - PullRequest
2 голосов
/ 07 января 2020

Я пытаюсь выполнить задачу, в которой ожидаемый доход имеет тип double. В качестве параметра я передаю задачу функция типа double. Ниже приведен код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;

namespace Tasks
{
    class Program
    {
        private static double Dobro(double x)
        {
            return 2 * x;
        }
        static void Main(string[] args)
        {

            Task<double> dobro = new Task<double>(Dobro(15));


            Console.ReadKey();
        }
    }
}

Тем не менее, у меня была следующая ошибка времени компиляции в ответ:

CS1503 C# Аргумент 1: невозможно преобразовать из 'double' в 'System.Fun c'

Как решить эту проблему?

1 Ответ

5 голосов
/ 07 января 2020

Если вы хотите создать Task из лямбда-функции самой :

   Task<double> dobro = new Task<double>(() => Dobro(15));

Или (создать и запустить лямбда-функции на основе задачи)

   Task<double> dobro = Task<double>.Run(() => Dobro(15));

Если вы хотите обернуть лямбда-функцию результат выполнения (т.е. выполнить Dobro(15) и вернуть результат как complete Task)

   Task<double> dobro = Task<double>.FromResult(Dobro(15));
...