我正在開發 .NET CORE 3.1 應用程式。我有兩種型別的記錄物件,它們呼叫相同的方法來處理資料并作為回報添加到相同的串列中。我將代碼從經典回圈修改為執行緒。所以我創建了兩個執行緒和目標,我可以提高性能但是如果我運行兩個執行緒我不會得到結果但是如果我只做一個執行緒那么它會作業并得到結果......不確定我從拼圖中缺少什么。
Thread processThreadA = new Thread(async () =>
{
var processedNonInbound= await MethodX(data);
returnList.AddRange(processedNonInbound);
});
Thread processThreadB = new Thread(async () =>
{
var processInbound = await MethodX(data);
returnList.AddRange(processInbound);
});
processThreadA.Start();
processThreadB.Start();
processThreadA.Join();
processThreadB.Join();
執行緒呼叫的方法:
private async Task<List<Customers>> MethodX(Record r){
//.....
}
uj5u.com熱心網友回復:
試試這個代碼:
Thread processThreadA = new Thread(async () =>
{
await Task.Delay(TimeSpan.FromSeconds(5.0));
Console.WriteLine($"{DateTime.Now} A");
});
Thread processThreadB = new Thread(async () =>
{
await Task.Delay(TimeSpan.FromSeconds(5.0));
Console.WriteLine($"{DateTime.Now} B");
});
processThreadA.Start();
processThreadB.Start();
Console.WriteLine($"{DateTime.Now} Started");
processThreadA.Join();
processThreadB.Join();
Console.WriteLine($"{DateTime.Now} Joined");
它輸出:
2022/03/22 18:37:32 Started
2022/03/22 18:37:32 Joined
2022/03/22 18:37:37 B
2022/03/22 18:37:37 A
實際上,執行緒啟動并且一旦它們擊中await它們就會將控制權回傳給呼叫代碼 - 因此Join完成 - 并且在延遲完成后,代碼然后繼續。
現在嘗試同樣的事情,但有任務:
Task processTaskA = Task.Run(async () =>
{
await Task.Delay(TimeSpan.FromSeconds(5.0));
Console.WriteLine($"{DateTime.Now} A");
});
Task processTaskB = Task.Run(async () =>
{
await Task.Delay(TimeSpan.FromSeconds(5.0));
Console.WriteLine($"{DateTime.Now} B");
});
Console.WriteLine($"{DateTime.Now} Started");
Task.WaitAll(processTaskA, processTaskB);
Console.WriteLine($"{DateTime.Now} Joined");
這給出了:
2022/03/22 18:40:33 Started
2022/03/22 18:40:38 A
2022/03/22 18:40:38 B
2022/03/22 18:40:38 Joined
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/450271.html
標籤:C# 多线程 异步等待 线程安全 .net-core-3.1
