事件处理程序在异步方法中引发两次

时间:2019-05-29 07:05:34

标签: c#

我有一个异步方法,我在其中调用事件,它引发了两次。我不知道我在做什么错。这是我从中调用的方法:

public async Task SyncData(GAT t)
{
    try
    {
        GetInventoryDataResponse response = await GetInventoryData(t);

        List<InventoryData> inventoryData = response.InventoryDataColl;

        //Some logic

        NotifyDataEvent?.Invoke(this, new NotifyEventArgs(Result.Success));
    }
    catch (Exception ex)
    {
        Log.WarnWithException("Unable to sync", ex);
        throw;
    }
}

这是我注册和取消注册活动的班级。在构造函数中,我正在注册它:

_stationAgent.NotifyDataEvent += NotifyData;

在dispose方法中,我取消注册此事件

_stationAgent.NotifyDataEvent -= NotifyData;

但是notifydata多次提出。有什么问题吗?

1 个答案:

答案 0 :(得分:1)

检查事件的调用列表:

EventHandler e = NotifyDataEvent;
var count = e.GetInvocationList().Length;

如果count = 2,则您呼叫NotifyDataEvent +=...两次。如果是count = 1,那么您将两次致电NotifyDataEvent.Invoke...