c# - 异步方法未按正确(预期)顺序执行
问题描述
我有一个包含以下事件的组件:
// MyComponent :
[Parameter] public EventCallback<DataChangedEventArgs> OnTextChanged { get; set; }
protected async void SomeMethod(ChangeEventArgs args)
{
DataChangedEventArgs evArg =new DataChangedEventArgs(args.value);
Console.Writeline("1");
await OnTextChanged.InvokeAsync(evArg);
Items = evArg.Data; // <=== problem here: Data is always null.
Console.Writeline("4");
}
当我OnTextChanged
在另一个组件上使用和处理事件时,我设置了以下Data
属性DataChangedEventArgs
:
// AnotherComponent that uses MyComponent:
public async void theTextChanged(DataChangedEventArgs args)
{
//...
Console.Writeline("2");
args.Data = await GetAPersonAsync(); // or some other object
Console.Writeline("3");
}
现在我希望Items
设置为Person
(行Items = evArg.Data
)。But始终为 null,这意味着在事件处理程序中对(引用类型)Data
所做的更改在调用方法中不可访问。args.Data
SomeMethod
任何人都可以帮助我吗?
更新:我认为它与async
方法有关,因为控制台结果不是我所期望的(1,2,3,4):
console:
1
2
4
3
解决方案
您应该使用 async Task 而不是 async void。
Theodor 提供了文档的链接
推荐阅读
- python - 我如何减去 django 中的时间日期来确定帖子的年龄?
- simulation - 在 AnyLogic 中使用代理名称作为 selectOutput 的条件
- javascript - 合并两个 JavaScript 对象和冲突的属性
- python-3.x - 无法将日期附加到文件名
- azure-devops - 通过 Azure DevOps 自定义任务查询 Azure StorageAccount blob 容器
- mysql - MySQL - 为什么我的表在外键检查时不存在,然后在执行 SELECT 并禁用检查时存在?
- angular - ViewChild 与内容子项
- python - 将数据框中的每一行作为 pandas 中的新数据框进行操作
- wordpress - Gutenberg Block Style CSS Class Is Not Applying on Backend
- android - 以编程方式将android设备连接到wifi