您好我试图异步添加项目到列表但我不知道它是如何完成的,如果我使用的语法不正确,这就是我现在所拥有的:
我的看法:
await viewModel.getMessages();
list.ItemsSource = viewModel.Messages;
Run Code Online (Sandbox Code Playgroud)
我的视图模型:
public List<Message> Messages { get; set; }
public async Task getMessages()
{
await GetRemoteMessages();
}
private async Task GetRemoteMessages()
{
var remoteClient = new ChiesiClient();
var messages = await remoteClient.getMessages().ConfigureAwait(false);
//App.Database.
await SaveAll(messages).ConfigureAwait(false);
}
public async Task SaveAll(IEnumerable<Message> _messages)
{
foreach (var item in _messages)
{
await SaveMessage(item);
}
}
public async Task SaveMessage(Message item)
{
await Messages.Add(new Message // Cannot await void
{
Title = item.Title,
Description = item.Description,
Date = …Run Code Online (Sandbox Code Playgroud) 我搭建了一个像这样的 WebAPI 模板。
[HttpGet]
public async Task<ActionResult<IEnumerable<ThingVm>>> GetThings()
{
Task<List<ThingVm>> output = Context.Things
.Select(e => new ThingVm(e))
.ToListAsync();
return await output;
}
Run Code Online (Sandbox Code Playgroud)
我注意到返回的结果不会传达任何状态代码(因为我没有提供 200 或 404 等)。所以我添加了标准的、通常的Ok(...)调用。
[HttpGet]
public async Task<ActionResult<IEnumerable<ThingVm>>> GetThings()
{
...
return await Ok(output);
}
Run Code Online (Sandbox Code Playgroud)
遗憾的是,计算机并没有意识到该操作并像这样解释了错误。
CS1061“OkObjectResult”不包含“GetAwaiter”的定义,并且找不到接受“OkObjectResult”类型的第一个参数的可访问扩展方法“GetAwaiter”(您是否缺少 using 指令或程序集引用?)
我明白为什么会这样。我不知道如何在保留响应中发出的状态代码的同时解决它。
我在谷歌上搜索了它,但发现了一些非常陈旧的东西,完全不相关的东西和相当不相关的东西。就是这样 - 根本没有太多其他热门歌曲,这也令人惊讶。
如何发出状态代码并应用异步方法?它们不是相互排斥的,是吗?
c# asynchronous asp.net-web-api asp.net-core asp.net-core-2.2