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