我在班级顶部定义了一个任务,如下所示:
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;
}
}
答案 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来调用异步方法,这两种情况都只是增加了开销,并且没有增加值。