我可能会被视为
的副本wrapping-synchronous-code-into-asynchronous-call
然而,我的问题是,如果我不关心任务的结果怎么办?
更多细节:我希望任务运行以及是否完成,我希望任务在另一个线程中再次运行。
具体来说,我有一个服务,它读取一个表并获取所有尚未处理的记录。该任务是业务,但我不知道在该实例中是否有一条记录或1000条记录要处理。如果它是1000,它将需要几分钟,一个将花费不到一秒,通常任务找不到任何事情。因此,在这种情况下,我不需要知道上一个任务的结果,也不需要等待它完成。
我已经阅读了异步,如果我没有消耗await结果,我读到它不会继续。这是真的吗?
示例是:
private async Task MakeRequest()
{
mainTimer.Stop();
var task = Task.Run(() => Exec());
await task;
mainTimer.Start();
}
这是否意味着任务没有准备好再次运行,除非我有"等待任务"命令?
答案 0 :(得分:1)
等待任务;
要等待任务完成并继续执行下一行的状态。
运行时:
Task.Run(()=> Exec());
它立即开始执行新任务,无论你是否使用等待都没关系。您可以根据需要在任务中多次运行相同的功能,而无需使用关键字等待。但是你需要确保你的函数可以处理并发执行。
如果您需要在不使用await的情况下获得任务结果,则可以在启动任务的同一线程上继续执行:
task.ContinueWith(task => {});
答案 1 :(得分:0)
如果您不关心结果,请使用void函数:
private async void MakeRequest()
{
mainTimer.Stop();
var task = Task.Run(() => Exec());
await task;
mainTimer.Start();
}
此外,不消耗任务不会阻止任何事情,即使你没有等待它也会完成。