异步方法的事件订阅

Event subscription on async method

我想以两种方式启动 LoadDataAsync。首先通过 FormLoad() 中的订阅事件和经典方法 ManualLoad().

但我做不到。

我无法订阅任务 return。使用 void 它可以工作,但是使用 void 不能 awaitManualLoad() 方法中。如何使这两种方式都起作用?

    public delegate void ProductDelegate(long? iShopProductId);
    public event ProductDelegate ProductSelectionChanged = delegate { };

    public async Task LoadDataAsync(long? iProductId)
    {
        //await action....
    }

    //first way
    public void FormLoad()
    {
        this.ProductSelectionChanged += LoadDataAsync //UNDERLINED ERROR;
    }

    //second way
    public async Task ManualLoad()
    {
        await LoadDataAsync(2);
    }

由于事件不支持 async Task,您需要通过 "wrapping" 解决该问题,例如:

this.ProductSelectionChanged += async (s, e) => await LoadDataAsync();

我在这里创建了一个匿名的 method/handler,签名为 async void,它除了 await 任务返回 LoadDataAsync 方法(你应该添加ConfigureAwait(false),具体取决于您的具体用例)。