24

...Asyncと returnで終わるメソッドを提供するライブラリを使用していますTask。これらをコマンド ライン アプリケーションで使用します。だから私はそれらを同期的にたくさん呼び出す必要があります。

C# ではもちろん、メソッドで修飾子をMain使用できないため、これらのメソッドをメソッドで呼び出すことはできません。これがタスクであると仮定します:asyncMain

var task = datastore.Save(data);

次のようないくつかの解決策が見つかりました。

Tasks.WaitAll(task);
task.Wait();

ただし、これらすべてのラップで例外がスローされますがAggregateExceptionそれは望ましくありません。私は言いたいだけでtask.Result、元の例外がスローされることを期待しています。

を返すメソッドを使用すると、継続タスクが設定されていないにもかかわらずTask<TResult>task.Resultスローされます。AggregateExceptionなぜこれが起こっているのですか?

私も試しましたが、

task.RunSynchronously();

エラーが発生します:

RunSynchronously は、非同期メソッドから返されたタスクなど、デリゲートにバインドされていないタスクでは呼び出すことができません。

とマークされたメソッドではないと思いasyncます。

非同期コンテキストがないコンソール アプリで非同期アプリ用に設計されたライブラリを使用するパターンに関するアイデアはありますか?

4

3 に答える 3

2

ダミーを作成できますMain

public static void Main()
{
    MainAsync().Wait();
}

public static async Task MainAsync()
{
    try {
        var result = await dataStore.Save(data);
    } catch(ExceptionYouWantToCatch e) {
       // handle it
    }
}

また、この回答を参照してください: https://stackoverflow.com/a/9212343/1529246

于 2013-07-16T05:35:07.293 に答える