我在班级顶部定义了一个任务,如下所示: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 回答
回首忆惘然
TA贡献1847条经验 获得超11个赞
MainTask不应该是 a Task,而应该是 a Func<Task>(或者,在这种情况下,由于异步操作似乎提供了一个布尔值 a Func<Task<bool>>,因此您可以随时通过简单地调用方法来启动异步操作。
所以定义为:
Func<Task<bool>> AsyncOperation {get;set;}
将其用作:
while(!await AsyncOperation())
{
//do nothing
}
至于分配它,您只需分配您拥有的异步方法:
AsyncOperation = GetResult;
请注意,您真的不应该Task每次都使用构造函数。不要处理未开始的任务,它只会引起混乱。也不需要用来Task.Run调用异步方法。它已经是异步的。也不需要使用 async lambda 来调用异步方法,这两件事都只是增加了开销而没有增加任何价值。
- 1 回答
- 0 关注
- 186 浏览
添加回答
举报
0/150
提交
取消
