[.NET Thread] 透過WriteAsync嘗試非阻塞與執行緒

原先在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後的處理