我目前正在使用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;
}
答案 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以获得一个很好的例子。