[英]Task running asynchronously on another thread .NET
我有一个需要在另一个线程上异步执行的过程。 该程序将批量处理多个数据(可以接收 2 个项目或 40000 个)。 从本地测试来看,最长的运行时间约为 2 分钟(40000 个项目)。
场景如下:UI调用后端,后端启动一个异步线程,该线程将运行该程序,然后返回一个boolean,以了解是否收到请求(这些是要求,我不使用等待/等待)。 我不太确定在这里使用什么,在:
Task.Run(()=> MyProcedure())
或者
Task.Factory.StartNew(()=> MyProcedure(), TaskCreationOptions.LongRunning)
对于这种情况,最好的选择是什么?
该程序将批量处理多个数据
这可能意味着多件事。 如果您要在这些批次中使用async
/ await
,这样您的MyProcedure
实际上是 asynchronous ,那么您应该可以使用Task.Run
; MyProcedure
在异步时将自身释放回线程池这一事实意味着这应该可以正常工作,例如:
async Task MyProcedure() { while (ThereIsWorkToDo) { var batch = // ... gather some work await ProcessBatchAsync(batch).ConfigureAwait(false); } }
但是:如果MyProcedure()
不是异步的,但您只想在后台运行它,那么是的, TaskCreationOptions.LongRunning
可能是合理的,但需要 2 分钟:所以可能是一个常规的专用线程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.