Threading multiple async calls

后端 未结 2 1827
余生分开走
余生分开走 2021-01-01 00:41

Part of my Silverlight application requires data from three service requests. Up until now I\'ve been chaining the requests so as one completes the other starts... until the

2条回答
  •  情话喂你
    2021-01-01 01:12

    Take a look at this example:

    Will fire Completed event and print 'done' to Debug Output once both services returned. Key thing is that waiting for AutoResetEvents happens in background thread.


    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
    
            Completed += (s, a) => { Debug.WriteLine("done"); };
    
            wrk.DoWork += (s, a) =>
                {
                    Start();
                };
    
            wrk.RunWorkerAsync();
        }
        public event EventHandler Completed;
    
        private void Start()
        {
            auto1.WaitOne();
            auto2.WaitOne();
    
            Completed(this, EventArgs.Empty);
        }
    
        public AutoResetEvent auto1 = new AutoResetEvent(false);
        public AutoResetEvent auto2 = new AutoResetEvent(false);
    
        BackgroundWorker wrk = new BackgroundWorker();
    
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            ServiceReference1.Service1Client clien = new SilverlightAsyncTest.ServiceReference1.Service1Client();
    
            clien.DoWorkCompleted += new EventHandler(clien_DoWorkCompleted);
            clien.DoWork2Completed += new EventHandler(clien_DoWork2Completed);
    
            clien.DoWorkAsync();
            clien.DoWork2Async();
        }
    
        void clien_DoWork2Completed(object sender, SilverlightAsyncTest.ServiceReference1.DoWork2CompletedEventArgs e)
        {
            Debug.WriteLine("2");
            auto1.Set();
        }
    
        void clien_DoWorkCompleted(object sender, SilverlightAsyncTest.ServiceReference1.DoWorkCompletedEventArgs e)
        {
            Debug.WriteLine("1");
            auto2.Set();
        }
    }
    

提交回复
热议问题