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

时间:2020-06-25 08:45:35

标签: c# .net multithreading asynchronous threadpool

我有一个过程需要异步在另一个线程上执行。该过程将批量处理大量数据(可以接收2个项目或40000个数据)。从本地测试来看,最长的运行时间约为2分钟(用于40000个项目)。

场景如下:后端的UI调用,后端启动一个异步线程,该线程将运行该过程,然后返回一个布尔值,以了解是否已接收到请求(这些是要求,我不要使用await / wait)。在以下之间,我不确定在这里使用什么

Task.Run(()=> MyProcedure())

OR

Task.Factory.StartNew(()=> MyProcedure(), TaskCreationOptions.LongRunning)

在这种情况下最好的选择是什么?

1 个答案:

答案 0 :(得分:1)

该过程将分批处理大量数据

这可能意味着多件事。如果您打算在这些批次中使用await / MyProcedure,以使Task.Run实际上是异步的,那么使用{{1} }; MyProcedure会在异步后立即释放回线程池,这意味着它应该可以正常工作,例如:

async Task MyProcedure()
{
    while (ThereIsWorkToDo)
    {
       var batch = // ... gather some work
       await ProcessBatchAsync(batch).ConfigureAwait(false);
    }
}

但是:如果MyProcedure()不是异步的,但是您只想在后台运行它,那么,TaskCreationOptions.LongRunning可能是合理的,但是对于某些情况2分钟:可能是常规的专用线程。

相关问题