预定义任务多次返回异步

时间:2018-12-17 21:58:18

标签: c# multithreading task

我在班级顶部定义了一个任务,如下所示:

Task<string> MainTask {get;set;}

然后在应用程序内部构建此任务。

MainTask = new Task<string>( () => 
{
    return Task.Run<string>( async () => 
    {
        await GetResult();

    }).Result;
});

我想循环执行直到任务返回数据,但是一旦任务第一次完成,我就无法再次启动它。

bool gotResult = false;
While(gotResult == false)
{
  MainTask.Start();
  MainTask.Wait();
  if(MainTask.Result)
  {
    gotResult = true;
  }
}

1 个答案:

答案 0 :(得分:2)

MainTask不应该是Task,而应该是Func<Task>(或者,在这种情况下,由于异步操作似乎提供了布尔值,因此{{1} },只需调用该方法,即可随时启动异步操作。

因此将其定义为:

Func<Task<bool>>

用作:

Func<Task<bool>> AsyncOperation {get;set;}

关于分配它,您只需要分配您拥有的异步方法:

while(!await AsyncOperation())
{
    //do nothing
}

请注意,您实际上不应该真正使用AsyncOperation = GetResult; 构造函数。不要处理未启动的任务,只会引起混乱。也无需使用Task来调用异步方法。它已经已经异步了。也无需使用异步lambda来调用异步方法,这两种情况都只是增加了开销,并且没有增加值。