C# 正在从工人类返回状态
我有一个服务班和一个工人班。worker类完成所有处理C# 正在从工人类返回状态,c#,C#,我有一个服务班和一个工人班。worker类完成所有处理 class WorkerClass { public void ProcessWork(<params to the method>) { // Get the tasks from the DB. // Call a 3rd party web service to process each of the tasks. } } 从worker类中公开属性并在servi
class WorkerClass
{
public void ProcessWork(<params to the method>)
{
// Get the tasks from the DB.
// Call a 3rd party web service to process each of the tasks.
}
}
获取状态的干净方法是什么?前两个选项在功能上完全相同。这两种方法都可以很好地满足您的需要。第二个暗示委托是必需的,而第一个暗示委托不是必需的。一个事件也可能意味着它的使用超出了这一方法的范围 至于第三个选项,它并没有给调用方在号码更新时执行代码的机会,它只是给了调用方访问信息的机会 因此,如果此类型的调用者需要使用此信息(每次值更改时),那么您应该使用与前两个选项中的一个类似的方法,以便工作人员可以“推送”信息给调用者 如果调用方希望在需要信息时从工作者“提取”信息,则使用第三个选项 请注意,您还可以使用一个
Progress
类,该类具有相应的IProgress
界面,与前两个选项相当,但专门为使用进度更新UI的工作人员定制
推式和拉式方法实际上都可以根据回溯任务的进度更新UI。如果进度很少发生,那么每次进度发生变化时都更新UI可能是有意义的,因此UI希望在这些更新发生时得到“通知”。如果更新非常频繁,那么UI可能希望有一个计时器,每隔一段时间查看一次当前状态,以避免UI因更新次数过多而负担过重
当然,如果您正在推送信息,而不仅仅是完成百分比,那么不要丢失任何信息可能很重要,在这种情况下,您的第三种方法不是一种选择,因为在两次抓取之间可能会发生多次更新
当然,如果您正在编写一个足够通用的worker,那么您可能希望同时公开推拉机制,让调用方选择合适的机制
public void ProcessWork(object obj1, Action<int, int> actionProgressTracker)