簡體   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