首页 > 解决方案 > 异步方法未按正确(预期)顺序执行

问题描述

我有一个包含以下事件的组件:

    // 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.DataSomeMethod

任何人都可以帮助我吗?

更新:我认为它与async方法有关,因为控制台结果不是我所期望的(1,2,3,4):

console:
1
2
4
3

标签: c#async-awaitblazorblazor-webassembly

解决方案


您应该使用 async Task 而不是 async void。

Theodor 提供了文档的链接


推荐阅读