C# 控制台应用程序异步/等待不返回我的列表
为什么下面的代码不编译?我只是想得到一个简单的列表C# 控制台应用程序异步/等待不返回我的列表,c#,async-await,C#,Async Await,为什么下面的代码不编译?我只是想得到一个简单的列表 namespace ConsoleApplication1 { class Program { static void Main(string[] args) { var list = MainAsync(args).Wait(); //Compile error: Cannot assign void to an implicitly-typed
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>'
}
}
}
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
var list=mainsync(args.Wait();
//编译错误:无法将void分配给隐式类型的变量
}
静态异步任务mainsync(字符串[]args)
{
引导程序bs=新引导程序();
var list=wait bs.GetList();
}
}
公共类引导程序
{
公共异步任务GetList()
{
List toReturn=新列表();
toReturn.Add(“你好”);
toReturn.添加(“世界”);
返回等待返回;
//编译错误:“List”不包含“GetAwaiter”的定义,并且没有扩展方法“GetAwaiter”接受类型为“List”的第一个参数
}
}
}
这里没有使此方法异步的用例,只需返回一个列表
更新
或者另一种模拟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);
}
专用异步任务测试()
{
List toReturn=新列表();
toReturn.Add(“你好”);
toReturn.添加(“世界”);
返回等待任务。从结果返回(返回);
}
更新
正如鲁福爵士所提到的,这个
async
和await
有很多内容,他是一个很好的开始,他在这些主题上是一个非常清晰的博客你得到了什么编译错误?为什么await
在返回语句中?用编译错误更新了代码。不熟悉async/await,所以我只是尝试一些简单易懂的东西。mainSync
不返回值。为什么要在这里尝试将结果存储到列表中
?我只是尝试模拟一个将填充列表的数据库调用,因为OP是async/Wait的新成员。您应该提到ConfigureWait(false),否则您会将其发送到未来deadlock@Rod阅读您发现大量async/awaitConfigureAwait(false)的地方仅当您在UI同步上下文(也是asp.net请求上下文)中启动任务时才需要,因为默认情况下所有工作都安排在UI线程上。控制台应用不会有这个问题,因为它会在线程池线程上调度任务。我还推荐克利里的这本书:
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;
}
private async Task<List<string>> Test()
{
List<string> toReturn = new List<string>();
toReturn.Add("hello");
toReturn.Add("world");
return await Task.FromResult(toReturn);
}