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