多線程可發揮多核心效能(並行運算),亦能讓長時間操作獨立執行不阻塞主線程(異步操作)。前者利用多核提升效能,後者避免 CPU 空等待。廣義上異步亦屬並行一種。
補充:異步不一定依賴線程,使用佇列異步處理資料亦屬異步模式。
class AsyncObj
{
public EventWaitHandle AsyncWaitHandle { get; set; }
public object Result { get; set; }
public AsyncObj()
{
AsyncWaitHandle = new AutoResetEvent(false);
}
}
AsyncObj ao = new AsyncObj();
ThreadPool.QueueUserWorkItem(state =>
{
AsyncObj obj = state as AsyncObj;
Console.WriteLine("async operation started @ " + DateTime.Now.ToString("mm:ss"));
Thread.Sleep(2000);
Console.WriteLine("async operation completed @ " + DateTime.Now.ToString("mm:ss"));
obj.Result = 100;
obj.AsyncWaitHandle.Set();
}, ao);
Console.WriteLine("main operation started @ " + DateTime.Now.ToString("mm:ss"));
Thread.Sleep(1000);
Console.WriteLine("main operation completed @ " + DateTime.Now.ToString("mm:ss"));
ao.AsyncWaitHandle.WaitOne();
Console.WriteLine("get async operation result : " + ao.Result.ToString() + " @ " + DateTime.Now.ToString("mm:ss"));

輸出顯示主線程與工作線程交錯執行,主線程在 WaitOne() 處阻塞直到工作線程 Set() 釋放信號。