//主執行緒ID
Console.WriteLine(string.Format("Main:{0}", System.Threading.Thread.CurrentThread.ManagedThreadId));
//Task執行緒ID
Task t = Task.Run(() => { Console.WriteLine(string.Format("Task:{0}", System.Threading.Thread.CurrentThread.ManagedThreadId)); });
//使用Await呼叫方法
await GetAwaitThreadId();
//等候Task完成
t.Wait();
async Task GetAwaitThreadId()
{
//Await方法執行緒ID
Console.WriteLine(string.Format("Await:{0}", System.Threading.Thread.CurrentThread.ManagedThreadId));
}
另外,當呼叫非同步方法時,在前半部的程式碼(Await之前),依然是原本的執行緒在執行,遇到Await時,原本的執行緒會回到呼叫端
後半部的程式碼(Await之後),會暫時被保留,等到要等待的工作完成以後,會另外找一條執行緒出來執行後半部程式碼
//呼叫方法
Task t = PrintAwaitThreadId();
for (int i = 0; i < 10; i++)
{
//列出目前執行緒
Console.WriteLine(string.Format("Main[{1}]:{0}", System.Threading.Thread.CurrentThread.ManagedThreadId, i));
//產生新的執行緒做時間延遲
await Task.Delay(rnd.Next(1, 10));
}
await t;
async Task PrintAwaitThreadId()
{
for (int i = 0; i < 10; i++)
{
//列出目前執行緒
Console.WriteLine(string.Format("Await[{1}]:{0}", System.Threading.Thread.CurrentThread.ManagedThreadId, i));
//產生新的執行緒做時間延遲
await Task.Delay(rnd.Next(1, 10));
}
}
網誌管理員已經移除這則留言。
回覆刪除作者已經移除這則留言。
回覆刪除網誌管理員已經移除這則留言。
回覆刪除https://saglamproxy.com
回覆刪除metin2 proxy
proxy satın al
knight online proxy
mobil proxy satın al
QZ04U