Меню сайта
Наш опрос
Оцените мой сайт
Всего ответов: 6
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » 2014 » Июль » 22 » Асинхронное программирование на C# в Visual Studio 11
15:16
Асинхронное программирование на C# в Visual Studio 11
Вы хотите приобрести пенопласт? Тогда заказать пенопласт Вы можете на специальном сайте в интернете.

На днях я побывал на конференции Windows 8 Camp и увидел не мало интересных вещей. Среди них была продемонстрирована новая концепция асинхронного программирования на C#.Для написания примеров этой статьи я использовал Visual Studio 11 Developer Preview.Итак, в C#, входящем в состав Visual Studio 11, появились два новых ключевых слова: async и await. Хотелось бы продемонстрировать их работу сразу на примере. using System;using System.IO;using System.Net;using System.Threading;using System.Threading.Tasks;namespace AsyncDemo { class Program { const string url = ; const string filename = "C:\\firefix.exe"; static void Main(string[] args) { Test(); while(true) { Console.Write("-"); Console.Out.Flush(); Thread.Sleep(20); } } static async void Test() { using(WebClient webClient = new WebClient()) { Task<byte[]> downloadTask = webClient.DownloadDataTaskAsync(url); byte[] file = await downloadTask; Console.WriteLine("Downloaded"); using(FileStream stream = File.OpenWrite(filename)) { Task writeTask = stream.WriteAsync(file, 0, file.Length); await writeTask; Console.WriteLine("Written"); } } } }}Как видно из примера, кроме новых ключевых слов, в .NET 4.5 появились новые методы. Все методы, поддерживающие асинхронное выполнение, в .NET 4.5 оканчиваются на Async.Метод, содержащий асинхронное выполнение, должен быть помечен ключевым словом async и делится на две части: до ключевого слова await и после него.Методы, поддерживающие асинхронное выполнение, должны возвращать значение типа Task или Task<TResult>. Применение операции awiat к объекту Task будет отложено до тех пор, пока задача не будет выполнена. После начала ожидания управление возвращается в рабочий поток, а обработчик будет вызван в другом потоке. Вторая часть метода (после ключевого слова await) и является, по сути, обработчиком события завершения асинхронной операции.Вывод примера будет следующим:Как видите, вывод основного потока вклинился между окончанием операции загрузки и завершением сохранения файла.Нет ничего сложного в написании асинхронных методов самостоятельно. Для этого Вам всего лишь нужно вернуть из Вашего метода значение типа Task или Task<TResult>.  В конструктор такого объекта следует передать делегат, который будет выполняться. Далее, нужно запустить задачу вызовом метода Start и вернуть созданный объект.using System;using System.Threading;using System.Threading.Tasks;namespace AsyncDemo { class Program { static void Main(string[] args) { Test2(); while(true) { Console.Write("-"); Console.Out.Flush(); Thread.Sleep(20); } } static async void Test2() { Task<string> task = new AsyncWorker().WorkAsync(); string message = await task; Console.WriteLine(message); } } class AsyncWorker { public Task<string> WorkAsync() { Task<string> task = new Task<string>(Worker); task.Start(); return task; } string Worker() { Console.WriteLine("Step 1"); Thread.Sleep(500); Console.WriteLine("Step 2"); Thread.Sleep(500); return "Done"; } }}Класс Task содержит некоторое количество интересных статических методов. Ознакомиться с ними можно в документации msdn.

Просмотров: 389 | Добавил: admin | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
Форма входа
Календарь
«  Июль 2014  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031
Архив записей