如何返回任务<list <string>&gt;通过c#?</list <string>

时间:2012-12-19 19:48:53

标签: c# windows-store-apps

我目前正在使用async和等待的VS2012和.NET 4.5迈出第一步。

为此我正在实现一个带有以下签名的方法:

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

我知道如何返回列表,但我不知道如何将此列表放入任务&lt;&gt; 。 怎么做?

编辑:这是完整的例子,我需要知道我需要改变什么来使return语句成为可能

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

3 个答案:

答案 0 :(得分:6)

如果您的方法实际上是异步的,您只需添加async关键字,编译器就会为您生成Task

您也可以手动编写异步代码,在现有任务上使用ContinueWith()或使用Task类上的静态方法创建新任务。

如果你的方法不是异步的,那就没有意义了;你应该直接返回List<string> 如果由于某种原因,您需要从同步方法返回预先完成的Task<T>(如果您正在实现接口),则可以调用Task.FromResult。< / p>

答案 1 :(得分: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的回答更详细地介绍了异步/等待的可能性。

答案 2 :(得分:0)

如果您想要异步方法,请使用以下内容:

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以获得一个很好的例子。