原先在Net沒試過非阻塞,在nodeJS頻繁接觸後,想回到.NET試試看
範例程式
//以非同步的方式將位元組序列寫入至目前的資料流,並依寫入的位元組數將資料流中目前的位置往前移。
public static async Task WriteTextAsync(string filePath, string text)
{
//印出 await 之前的執行緒資訊
Console.WriteLine($"Is thread pool thread: {Thread.CurrentThread.IsThreadPoolThread}");
Console.WriteLine($"Thread pool worker thread id: {Thread.CurrentThread.ManagedThreadId}");
byte[] encodedText = Encoding.Unicode.GetBytes(text);
using (FileStream sourceStream = new FileStream(filePath,
FileMode.Append, FileAccess.Write, FileShare.None,
bufferSize: 4096, useAsync: true))
{
await sourceStream.WriteAsync(encodedText, 0, encodedText.Length);
//印出 await 之後的執行緒資訊
Console.WriteLine($"Is thread pool thread: {Thread.CurrentThread.IsThreadPoolThread}");
Console.WriteLine($"Thread pool worker thread id: {Thread.CurrentThread.ManagedThreadId}");
};
}
結果
結果可以看到,在await之後是由另一個線程執行;而Nodejs則會經過事件循環後,同一個線程執行await後的處理