Проблемы асинхронного программирования - PullRequest
2 голосов
/ 08 декабря 2011

Я недавно обнаружил CTP Async Library и хотел попробовать написать игрушечную программу, чтобы ознакомиться с новыми концепциями, однако я столкнулся с проблемой.

Я считаю, что код должен выписать

Starting
stuff in the middle
task string

но это не так. Вот код, с которым я работаю:

namespace TestingAsync
{
    class Program
    {
        static void Main(string[] args)
        {
            AsyncTest a = new AsyncTest();
            a.MethodAsync();
        }
    }

    class AsyncTest
    {
        async public void MethodAsync()
        {
            Console.WriteLine("Starting");
            string test = await Slow();
            Console.WriteLine("stuff in the middle");
            Console.WriteLine(test);
        }

        private async Task<string> Slow()
        {
            await TaskEx.Delay(5000);
            return "task string";
        }
    }
}

Есть идеи? Было бы здорово, если бы кто-нибудь знал о хороших уроках и / или видео, демонстрирующих эти концепции.

Ответы [ 2 ]

5 голосов
/ 08 декабря 2011

Вы вызываете асинхронный метод, но затем просто даете приложению завершиться.Опции:

  • Добавить Thread.Sleep (или Console.ReadLine) к вашему Main методу, чтобы вы могли спать, пока асинхронная работа происходит в фоновых потоках
  • Сделать асинхронныйметод возвращает Task и ожидает этого от вашего Main метода.

Например:

using System;
using System.Threading.Tasks;

class Program
{
    static void Main(string[] args)
    {
        AsyncTest a = new AsyncTest();
        Task task = a.MethodAsync();
        Console.WriteLine("Waiting in Main thread");
        task.Wait();
    }
}

class AsyncTest
{
    public async Task MethodAsync()
    {
        Console.WriteLine("Starting");
        string test = await Slow();
        Console.WriteLine("stuff in the middle");
        Console.WriteLine(test);
    }

    private async Task<string> Slow()
    {
        await TaskEx.Delay(5000);
        return "task string";
    }
}

Вывод:

Starting
Waiting in Main thread
stuff in the middle
task string

В терминахвидео, я провел сеанс по асинхронности в начале года в Progressive .NET - видео онлайн .Кроме того, у меня есть несколько сообщений в блоге об async , включая мою серию Eduasync .

Кроме того, в Microsoft есть много видео и сообщений в блоге от команды.См. Домашняя страница Async для большого количества ресурсов.

1 голос
/ 08 декабря 2011

Вы выходите из программы до истечения 5000 мс.

...