4.5 异步特性

       private async void StartButton_Click(object sender, RoutedEventArgs e)
        {
            // ExampleMethodAsync returns a Task<int> and has an int result.
            // A value is assigned to intTask when ExampleMethodAsync reaches
            // an await.
            try
            {
                Task<int> intTask = ExampleMethodAsync();
                // You can do other work here that doesn't require the result from
                // ExampleMethodAsync. . . .
                // You can access the int result when ExampleMethodAsync completes.
                int intResult = await intTask;

                // Or you can combine the previous two steps:
                //int intResult = await ExampleMethodAsync();

                // Process the result (intResult). . . .
            }
            catch (Exception)
            {
                // Process the exception. . . .
            }
        }

        public async Task<int> ExampleMethodAsync()
        {
            var httpClient = new HttpClient();

            // At the await expression, execution in this method is suspended, and
            // control returns to the caller of ExampleMethodAsync.
            // Variable exampleInt is assigned a value when GetStringAsync completes.
            int exampleInt = (await httpClient.GetStringAsync("http://msdn.microsoft.com")).Length;

            // You can break the previous line into several steps to clarify what happens:
            //Task<string> contentsTask = httpClient.GetStringAsync("http://msdn.microsoft.com");
            //string contents = await contentsTask;
            //int exampleInt = contents.Length; 

            // Continue with whatever processing is waiting for exampleInt. . . .

            // After the return statement, any method that's awaiting
            // ExampleMethodAsync can get the integer result.
            return exampleInt;
        }

 

 

posted on 2013-04-03 08:28  无觉-李敏  阅读(178)  评论(0编辑  收藏  举报