2

最近CTPAsyncLibraryを発見し、新しい概念に慣れるためにおもちゃのプログラムを書いてみたかったのですが、問題が発生しています。

コードを書き出す必要があると思います

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";
        }
    }
}

何か案は?誰かが概念を示すいくつかの良いチュートリアルやビデオを知っていれば素晴らしいでしょう。

4

2 に答える 2

5

非同期メソッドを呼び出していますが、アプリケーションを終了させて​​います。オプション:

  • 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

ビデオに関しては、今年の初めにプログレッシブ.NETで非同期のセッションを行いました。ビデオはオンラインです。さらに、Eduasyncシリーズを含め、非同期に関するブログ投稿が多数あります。

さらに、Microsoftのチームからのビデオやブログ投稿がたくさんあります。多くのリソースについては、非同期ホームページを参照してください。

于 2011-12-08T05:11:52.053 に答える
1

5000msが経過する前にプログラムが終了します。

于 2011-12-08T05:12:56.163 に答える