以下为什么不编译?我只是想获取一个简单的列表以返回。
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var list = MainAsync(args).Wait();
//Compile error: Cannot assign void to an implicitly-typed variable
}
static async Task MainAsync(string[] args)
{
Bootstrapper bs = new Bootstrapper();
var list = await bs.GetList();
}
}
public class Bootstrapper
{
public async Task<List<string>> GetList()
{
List<string> toReturn = new List<string>();
toReturn.Add("hello");
toReturn.Add("world");
return await toReturn;
//Compile error: 'List<string>' does not contain a definition for 'GetAwaiter' and no extension method 'GetAwaiter' accepting a first argument of type 'List<string>'
}
}
}
答案 0 :(得分:4)
这里没有使该方法async
的用例,只需返回一个List<string>
public List<string> GetList()
{
List<string> toReturn = new List<string>();
toReturn.Add("hello");
toReturn.Add("world");
return toReturn;
}
但是,如果有一些 IO 或其他需要在async
中进行的GetList
调用,则可以执行以下操作
public async Task<List<string>> GetList()
{
// now we have a reason to be async (barely)
await Task.Delay(1000);
List<string> toReturn = new List<string>();
toReturn.Add("hello");
toReturn.Add("world");
return toReturn;
}
更新
或模拟async
工作负载的另一种方法是Task.FromResult
private async Task<List<string>> Test()
{
List<string> toReturn = new List<string>();
toReturn.Add("hello");
toReturn.Add("world");
return await Task.FromResult(toReturn);
}
更新
如Rufo爵士所言,async
和await
有很多地方,Stephen Cleary是一个很好的起点,他是有关此类主题的博文丰富的博主< / p>