Webservice - 线程与异步方法调用

时间:2013-06-06 00:26:43

标签: c# multithreading .net-2.0

我有一组网络服务每天被击中2,000,000次; 7个网络服务。 每个服务当前都将传入的XML消息丢弃到磁盘(它是一个大磁盘)。

文件丢弃发生在请求开始时,我想将其关闭到一个新线程,所以我不会丢失写入文件所需的20ms。是的,那些20ms比你想象的更重要。

我正在使用.NET 2.0,并且想到了两种方法:对DropMessage()方法进行异步方法调用,或者启动一个新的Thread并调用它。

private void DumpMessage()// this method dumps the incoming message to File.

DumpMessages管理自己的业务。如果失败,它会知道该怎么做以及如何联系我的团队。

public delegate void AsyncDumpMessage();
AsyncDumpMessage caller = new AsyncDumpMessage(DumpMessage);
IAsyncResult result = caller.BeginInvoke(null, null);

VS

System.Threading.Thread t = new System.Threading.Thread(DumpMessage);
t.Start();

以上两个有什么警告吗?我倾向于使用异步方法,因为通过我的测试我已经获得了更好的性能

有什么其他想法可以更好地实现这一目标吗?性能和稳定性对我来说至关重要。

1 个答案:

答案 0 :(得分:1)

我会使用ThreadPool.QueueUserWorkItem来安排这项工作。

这将使用ThreadPool线程,该线程比启动单独线程的开销更小。它还建议一个“fire and forget”方法调用,其中异步委托调用建议您使用IAsyncResult

在更现代的框架版本中,我建议使用Task.Run,但这在.NET 2中不起作用。