包装synchronus方法以异步方式运行

时间:2018-05-30 19:09:20

标签: c# asynchronous

我可能会被视为

的副本

wrapping-synchronous-code-into-asynchronous-call

然而,我的问题是,如果我不关心任务的结果怎么办?

更多细节:我希望任务运行以及是否完成,我希望任务在另一个线程中再次运行。

具体来说,我有一个服务,它读取一个表并获取所有尚未处理的记录。该任务是业务,但我不知道在该实例中是否有一条记录或1000条记录要处理。如果它是1000,它将需要几分钟,一个将花费不到一秒,通常任务找不到任何事情。因此,在这种情况下,我不需要知道上一个任务的结果,也不需要等待它完成。

我已经阅读了异步,如果我没有消耗await结果,我读到它不会继续。这是真的吗?

示例是:

private async Task MakeRequest()
{
    mainTimer.Stop();
   var task = Task.Run(() => Exec());
   await task;
   mainTimer.Start();
}

这是否意味着任务没有准备好再次运行,除非我有"等待任务"命令?

2 个答案:

答案 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();
}

此外,不消耗任务不会阻止任何事情,即使你没有等待它也会完成。