如何构建但不启动它的任务吗?(How to construct a Task without sta

2019-08-31 10:18发布

我想利用这个任务<>构造函数 。 我似乎无法得到正确的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;
}

Answer 1:

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

要么

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

为了避免使用lambda,你需要写这样一个静态方法:

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

然后:

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


Answer 2:

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

   //...

   int result = yourTask.Result;

更新:

是的,不幸的是它启动任务。 上面不是提到使用的代码:

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

   //...

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


文章来源: How to construct a Task without starting it?