Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C语言的异步作业执行和作业状态管理#_C#_Multithreading_Wcf_Design Patterns_Asynchronous - Fatal编程技术网

C# 使用C语言的异步作业执行和作业状态管理#

C# 使用C语言的异步作业执行和作业状态管理#,c#,multithreading,wcf,design-patterns,asynchronous,C#,Multithreading,Wcf,Design Patterns,Asynchronous,我正在寻找一种设计模式,以异步方式执行表中排队的作业列表,并更新数据库中的作业状态(完成/失败/取消)。最好我应该能够根据用户的要求杀死一个作业,以防该作业需要比预期更多的时间来执行,或者如果用户错误地启动了该作业。每个作业都需要一段时间才能执行 我可以使用一个windows服务来监视表中的任何新作业,然后使用多线程异步执行它们。但是多线程非常复杂,而且容易出错。为此,使用WCF服务是否会有所帮助?例如,我可以使用WCF服务来执行作业并异步调用它,然后订阅其已完成事件以更新作业状态,而不是多线程

我正在寻找一种设计模式,以异步方式执行表中排队的作业列表,并更新数据库中的作业状态(完成/失败/取消)。最好我应该能够根据用户的要求杀死一个作业,以防该作业需要比预期更多的时间来执行,或者如果用户错误地启动了该作业。每个作业都需要一段时间才能执行

我可以使用一个windows服务来监视表中的任何新作业,然后使用多线程异步执行它们。但是多线程非常复杂,而且容易出错。为此,使用WCF服务是否会有所帮助?例如,我可以使用WCF服务来执行作业并异步调用它,然后订阅其已完成事件以更新作业状态,而不是多线程吗?哪一种选择更好,或者根本不重要?正如我所说,如果需要的话,我还需要能够取消工作。

查看相关信息。它似乎为您所需的一切提供了便利,可以说,只有在您需要将工作提供给工厂的地方才有真正的复杂性

抱歉回答得这么简短,没有例子。我正在打电话,还想吃饭。

设计模式是

如果要将队列实现为数据结构,则需要使用线程安全队列


如果您使用数据库表来实现队列,那么使用DBMS的原子性来确保只有一个使用者从队列中获取特定项目。

为什么需要并行执行它们而不是FIFO?如果您不需要它,这只会增加复杂性。因为它们是独立的,并行运行可以节省时间,而且队列必须在单独的机器上处理,单独的进程?弹性很重要吗?我这样问是因为我经常看到复杂的独立队列处理器在Windows服务中实现和托管(这通常是一个部署噩梦),而客户端进程中的后台线程就可以了。在这里,我应该能够在没有GUI的情况下通过自动化执行作业,并且还可以根据用户需求执行作业。没有单独的机器或过程。所有的加工都应该在一台机器上的不同线程上完成。如果您指的是.NET backgroundworker组件,那么它仅适用于从UI启动线程的情况。但在我的情况下,windows服务也可以启动作业