4

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

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

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>直接返回一个。
如果由于某种原因,您需要从同步方法返回一个预先完成Task<T>的(如果您正在实现一个接口),您可以调用Task.FromResult.

于 2012-12-19T19:51:46.130 回答
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 回答
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 回答