C# 8.0 搶先看 -- Async Stream (4) push model

搶先看 Async Stream 的最終章,在非 C# 8.0 的環境下也能寫出類似的效果。

如果編譯器本身不支援 C# 8.0 的 Async Stream,還是可以做出類似的效果,這種方式稱之為 push model,前述三篇文章所使用的方式都是 pull model。

push model 很神奇嗎?在 C# 中其實也不過就是 Observer Pattern (觀察者模式) 的應用而已, 不囉嗦,我們直接看程式碼:

    public class DelegateProcess
    {
        async static public Task ReadLineAsync(string path, Action<string> action)
        {


            using (StreamReader reader = File.OpenText(path))
            {
                while (await reader.ReadLineAsync() is string result)
                {
                    action.Invoke(result);
                    await Task.Delay(100);
                }

            }
        }
    }

道理說穿了,不過就是把外部要執行的動作以 Action<string> 委派的形式當作參數傳遞。所以外部會這樣呼叫:

await DelegateProcess.ReadLineAsync(path, (x) => Console.WriteLine(x));

解決問題的方法有很多,端看甚麼情境應用甚麼樣的方式來解決而已。整個 Async Stream 的 Sample Code 可以參考我的 github :AsyncStreamReadLineSample