gpt4 book ai didi

c# - 异步方法的事件订阅

转载 作者:行者123 更新时间:2023-11-30 14:53:31 24 4
gpt4 key购买 nike

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

但我无法让它工作。

我无法订阅任务返回。使用 void 它是有效的,但是使用 void 不能在 ManualLoad() 方法中 await 。如何使这两种方式都起作用?

    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,您需要通过“包装”它来解决这个问题,例如:

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

我在这里创建了一个匿名方法/处理程序,其签名为 async void,它什么都不做,然后 await 任务返回 LoadDataAsync-方法(您可能应该添加 ConfigureAwait(false),具体取决于您的具体用例)。

关于c# - 异步方法的事件订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29029939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com