4

私は現在、VS2012 と .NET 4.5 で async と await を使用して最初のステップを作成しています。

このために、次のシグネチャを持つメソッドを実装しています。

public Task<List<string>> foo() {...}

List を返す方法は知っていますが、このリストを Task<> に取得する方法がわかりません。どうやってするの?

編集: これが完全な例です。 return ステートメントを可能にするために何を変更する必要があるかを知る必要があります

public async Task<List<string>> foo()
{
    List<string> myList = new List<string>;
        {...}
    return mylist;
}
4

3 に答える 3

8

メソッドが実際に非同期である場合は、キーワードを追加するだけasyncで、コンパイラによって が生成さTaskれます。

既存のタスクで使用するか、クラスContinueWith()の静的メソッドを使用して新しいタスクを作成することで、手動で非同期コードを記述することもできます。Task

メソッドが非同期でない場合、意味がありません。List<string>aを直接返す必要があります。
何らかの理由で、同期メソッドからpre-completed を返す必要Task<T>がある場合 (インターフェイスを実装している場合)、 を呼び出すことができますTask.FromResult

于 2012-12-19T19:51:46.130 に答える
1

非同期メソッドが必要な場合は、次のようなものを使用します。

public async Task<List<string>> Testing()
{
    var uri1 = new Uri("http://www.google.com");
    using (var httpClient = new HttpClient())
    {
        var response = await httpClient.GetAsync(uri1);
        return (await response.Content.ReadAsAsync<List<string>>());
    }
}

すばらしい例については、http://www.asp.net/mvc/tutorials/mvc-4/using-asynchronous-methods-in-aspnet-mvc-4を参照してください。

于 2012-12-19T20:02:29.590 に答える
1

このようなもの?

public Task<List<string>> foo()
{
    return new Task<List<string>>(ReturnList);
}

List<string> ReturnList()
{
    //Do some work
    Thread.Sleep(1000);
    //Return the result
    return new List<string>();
}

ただし、これはベスト プラクティスではありません。SLaks の答えは、非同期/待機の可能性をより詳細にカバーしています。

于 2012-12-19T19:51:20.603 に答える