Подтвердить что ты не робот

Как создать задачу без ее запуска?

Я хочу использовать этот Task < > конструктор. Я не могу заставить sntax правильно, может кто-то исправить мой код.

Также, правильно ли я думаю, что если задача сконструирована таким образом, она не запускается?

Мне нужен конструктор, который мне нужен:

Task<TResult>(Func<Object, TResult>, Object)

Ошибка моего кода:

Аргумент 1: невозможно преобразовать из 'группы методов' в 'System.Func<object,int>'

static void Main(string[] args)
{
    var t = new Task<int>(GetIntAsync, "3"); //error is on this line
    ...
}

static async Task<int> GetIntAsync(string callerThreadId)
{
    ...
    return someInt;
}
4b9b3361

Ответ 1

var t = new Task<int>(() => GetIntAsync("3").Result);

или

var t = new Task<int>((ob) => GetIntAsync((string) ob).Result, "3");

Чтобы избежать использования лямбда, вам нужно написать статический метод следующим образом:

private static int GetInt(object state)
{
   return GetIntAsync(((string) state)).Result;
}

И затем:

var t = new Task<int>(GetInt, "3");

Ответ 2

Я предпочитаю использовать Unwrap() вместо Task.Result

Task<int> t = new Task<Task<int>>(async (ob) => 
    await GetIntAsync((string)ob), "3").Unwrap();

Ответ 3

   //creating task
   var yourTask = Task<int>.Factory.StartNew(() => GetIntAsync("3").Result);

   //...

   int result = yourTask.Result;

UPDATE:

Да, к сожалению, он начинает задачу. Вместо этого используйте код, указанный выше:

   //creating task
   var yourTask = new Task<int>(() => GetIntAsync("3").Result);

   //...

   // call task when you want
   int result = yourTask.Start();