繁体   English   中英

任务在另一个线程上异步运行 .NET

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM