Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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# 线程中的异常处理,联系WCF服务_C#_.net_Multithreading_Wcf - Fatal编程技术网

C# 线程中的异常处理,联系WCF服务

C# 线程中的异常处理,联系WCF服务,c#,.net,multithreading,wcf,C#,.net,Multithreading,Wcf,我对线程中的异常处理有疑问。我有一个简单的WCF服务,它接受一些字节作为输入。此WCF服务是从控制台应用程序调用的 方法片段MyMethod 如果直接从主线程调用此方法,则会发生异常,因为我的服务是在IIS中由应用程序执行的 但如果从线程调用,则永远不会发生异常: var thread = new Thread(() => MyMethod(file); thread.Start() 由于这个方法应该被调用多次,在foreach循环中,我发现如果我为每个文件创建一个线程。如果一个线程

我对线程中的异常处理有疑问。我有一个简单的WCF服务,它接受一些字节作为输入。此WCF服务是从控制台应用程序调用的

方法片段MyMethod

如果直接从主线程调用此方法,则会发生异常,因为我的服务是在IIS中由应用程序执行的

但如果从线程调用,则永远不会发生异常:

 var thread = new Thread(() => MyMethod(file);
 thread.Start()
由于这个方法应该被调用多次,在foreach循环中,我发现如果我为每个文件创建一个线程。如果一个线程失败,它应该只记录它并终止,这样它就不会中断应用程序本身


如何处理线程内部的异常?

在.NET 4.0中,添加了任务并行库TPL。这是处理线程的首选方法

任务是封装操作的对象,该操作将在某个点返回值或异常

基本的想法是你可以这样做:

Task.Run(() => { /* your code */ });
这将返回一个任务对象,该对象在内部代码完成时完成。您可以在这样的任务对象上安排继续,以便在发生这种情况时运行。但是,由于您正在执行WCF服务调用,您可以让VisualStudio为您生成异步方法,从而使您的生活更加轻松。特别是因为WCF方法是异步I/O的一种形式,您可以使用这些方法,而无需自己将它们包装到线程中

这意味着您的所有方法都以后缀“Async”结尾,并返回一个任务对象。通过使用async和Wait,您可以轻松地使用它们。通过使用Task.whall,您可以让多个任务并行运行。Task.WhenAll将返回一个处于故障状态的任务,其中包含当某个任务出错时,其中一个任务引发的所有异常


下面介绍如何在WCF服务中使用async and wait,这应该是您开始使用的方法。

在.NET 4.0中,添加了任务并行库TPL。这是处理线程的首选方法

任务是封装操作的对象,该操作将在某个点返回值或异常

基本的想法是你可以这样做:

Task.Run(() => { /* your code */ });
这将返回一个任务对象,该对象在内部代码完成时完成。您可以在这样的任务对象上安排继续,以便在发生这种情况时运行。但是,由于您正在执行WCF服务调用,您可以让VisualStudio为您生成异步方法,从而使您的生活更加轻松。特别是因为WCF方法是异步I/O的一种形式,您可以使用这些方法,而无需自己将它们包装到线程中

这意味着您的所有方法都以后缀“Async”结尾,并返回一个任务对象。通过使用async和Wait,您可以轻松地使用它们。通过使用Task.whall,您可以让多个任务并行运行。Task.WhenAll将返回一个处于故障状态的任务,其中包含当某个任务出错时,其中一个任务引发的所有异常


下面介绍如何在WCF服务中使用async and wait,这应该会让您开始使用。

这是正确的。以这种方式管理异步工作将减少它通常附带的绘制。我还建议使用Task。作为替代方案,您还应该查看附加的TPL和/或反应性扩展。这是正确的。以这种方式管理异步工作将减少它通常附带的绘制。我还建议使用Task。作为替代方案,您还应该查看额外的TPL和/或反应性扩展。