異步編程模型(勘誤)

還不確定是否正確,反正能正常執行,先記錄下來代碼

 public class App
    {
        private static string result;
        private static AutoResetEvent are = new AutoResetEvent(false);
        ManualResetEvent mre = new ManualResetEvent(false);

        public static Task<string> GetResultAsync()
        {
            return Task.Run(()=>DoSomething());
        }

        public static async Task<string> GetResultAsync2()
        {
            return await Task.Run(() => DoSomething());
        }

        private static string DoSomething()
        {
            ClassWithEvent cwe = new ClassWithEvent();
            cwe.DataCached += Cwe_DataCached;
            cwe.Set(2);
            while (!are.WaitOne()) ;
            return result;
        }

        private static void Cwe_DataCached(object sender, string e)
        {
            result = e;
            are.Set();
        }
    }


    public class ClassWithEvent
    {

        public event EventHandler<string> DataCached;
        private void RaiseEvent(string result)
        {
            DataCached?.Invoke(this, result);
        }


        public void Set(int delay)
        {
            Thread.Sleep(delay * 1000);
            RaiseEvent("Delay Done");
        }
    }

        private void button2_ClickAsync(object sender, EventArgs e)
        {

            //string str = Task.Run(()=> App.GetResult2()).Result;  
            string str = App.GetResultAsync().Result;
            //string str = await App.GetResult();
            MessageBox.Show(str);
        }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章