繁体   English   中英

回调事件订阅

[英]Callback event subscription

我有一个带有AddWork()方法和WorkDone事件的WorkManager类。 系统的其他组件将调用WorkManager.AddWork(),并且仅应在其工作完成时得到通知。 代替在每个事件触发时通知每个客户端的事件。

我正在努力寻找一个优雅的解决方案。

谢谢大家!

编辑:另一种查看方式是,说我有一个名为JobManager的类,并带有一个名为OnWorkDone()的事件。 我还有其他2个班需要收听此事件。

活动订户类别1

WorkManager.OnWorkDone += WorkDoneJob1;
void WorkDoneJob1()
{
     print("Job 1 is done!");
}

活动订户类别2

WorkManager.OnWorkDone += WorkDoneJob2;
void WorkDoneJob2()
{
     print("Job 2 is done!");
}

在此模型中,如果Jobmanager完成Job1,则将打印“作业1完成”和“作业2完成”,因为所有客户端均收到事件触发的通知。

我只希望class1在工作完成时收到通知。

将事件放在您添加到管理器中的作业对象上,然后将其订阅,然后再将其添加到管理器中。 或者,使管理器使用addwork方法接受回调,并具有作业和回调的字典,管理器在作业完成时将其触发。

更改您的OnWorkDone委托以包括事件args类型,该类型可以包含已完成作业的标识符,然后您的处理程序可以检查它是否关心该事件。

public delegate void OnWorkDone(object jobIdentifer);

void WorkDoneJob1(object jobIdentifer)
{
  if (jobIdentifer == this.jobIdentifer)
  {
     print("Job 1 is done!");
  }
}

不要使用事件。 只需调用类的Complete方法。

我通常不编写C#,因此语法可能不完整。

class WorkManager {
    void DoWord {
        WorkTask task = GetNextWorkTask();
        PerformWork(task);
        task.Complete();
    }

    WorkTask GetNextWorkTask() { ... }

    void PerformWork(WorkTask task) { ... }
}

virtual class WorkTask {
    virtual void Complete;
}

class WorkTask1 : WorkTask {
    void Complete {
        print("Job 1 done.");
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM