首页 > 解决方案 > 包装同步方法以异步运行

问题描述

我可能会被选为

将同步代码包装到异步调用中

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

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

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

我已经阅读了异步,如果我不使用等待结果,我读到它不会继续。真的吗?

例子是:

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

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

标签: c#asynchronous

解决方案


等待任务;

您想要等待任务完成并继续执行下一行的状态。

当你运行这个:

Task.Run(() => Exec());

它立即开始执行新任务,无论您是否使用await next 都没关系。您可以在任务中多次运行相同的功能,而无需使用关键字await。但是您需要确保您的函数可以处理并发执行。

如果您需要在不使用 await 的情况下获取任务结果,您可以在启动任务的同一线程上继续执行:

task.ContinueWith(task=> {});


推荐阅读