c# - 包装同步方法以异步运行
问题描述
我可能会被选为
但是,我的问题是,如果我不关心任务的结果怎么办?
更多细节:我希望任务运行,无论它是否完成,我希望任务在另一个线程中再次运行。
具体来说,我有一个服务,它读取一个表并获取所有尚未处理的记录。该任务确实是业务,但我不知道在该实例中是否要处理一条记录或 1000 条记录。如果是1000,需要几分钟,一个不到一秒,通常任务无事可做。所以在那种情况下,我不需要知道上一个任务的结果,也不需要等待它完成。
我已经阅读了异步,如果我不使用等待结果,我读到它不会继续。真的吗?
例子是:
private async Task MakeRequest()
{
mainTimer.Stop();
var task = Task.Run(() => Exec());
await task;
mainTimer.Start();
}
这是否意味着除非我有“等待任务”命令,否则该任务还没有准备好再次运行?
解决方案
等待任务;
您想要等待任务完成并继续执行下一行的状态。
当你运行这个:
Task.Run(() => Exec());
它立即开始执行新任务,无论您是否使用await next 都没关系。您可以在任务中多次运行相同的功能,而无需使用关键字await。但是您需要确保您的函数可以处理并发执行。
如果您需要在不使用 await 的情况下获取任务结果,您可以在启动任务的同一线程上继续执行:
task.ContinueWith(task=> {});
推荐阅读
- mysql - 转换器 Perl 脚本修复
- python - 怎么把这些词变成句子
- python - 如何访问未出现在已解析文本中的 li 元素?
- ajax - DataTables 警告:table id=extension - 无法重新初始化 DataTable。有关此错误的更多信息,请参阅 http://datatables.net/tn/3
- jquery - 如何在jquery的while循环中捕获转义按键事件?
- angularjs - 使用 angular js post 到 django 后端会产生 414 错误
- python - 即使我确定我正确导入了名称“ClassName”(Python)
- cryptography - 像以太坊地址一样保持 Sawtooth 公钥“公开”是个好主意吗?
- python - 如何从命令行激活 Anaconda 环境?
- kubernetes - 是否可以在不添加 Kubernetes 集群的情况下在 Gitlab 中运行测试?