【发布时间】:2021-09-15 07:23:31
【问题描述】:
我有一个包含以下事件的组件:
// 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 事件时,我设置了DataChangedEventArgs 的Data 属性:
// 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 行)。但是Data 始终为null,这意味着在SomeMethod 的调用方法中无法访问事件处理程序中对args.Data(这是一个引用类型)所做的更改。
谁能帮我解决这个问题?
更新:我认为这与async 方法有关,因为控制台结果与我预期的不同(1,2,3,4):
console:
1
2
4
3
【问题讨论】:
-
尝试使用异步任务而不是异步无效
-
@MisterMagoo 成功了!谢谢。请回答问题,以便我将其标记为 asnwer。我也将标题更改为更合适的标题
-
这能回答你的问题吗? C# async/await await doesn't await
-
OnTextChanged长什么样子? -
在@MisterMagoo 建议的基础上,您应该避免使用
async void,因为调用async void的问题是您甚至无法取回任务。您无法知道函数的任务何时完成。这使得调试难度增加了 10 倍。
标签: c# async-await blazor blazor-webassembly