无阻塞线程

本文关键字:线程 | 更新日期: 2023-09-27 18:29:45

我正在重新分解一个由几个全尺寸应用程序使用的C#项目。此类与硬件交互,执行某些命令通常需要数百毫秒或更长时间。在许多情况下,我会用ThreadPool调用来代替前一位程序员编写的Thread.Wet()调用来执行这些操作。

现在,这个项目提供给几个使用它的项目的一些函数需要数百毫秒或更长的时间才能执行,并向程序必须使用的调用程序返回一个值。我的问题是,我是否可以在这个项目中使用某种机制,使这些调用在主线程之外的某个线程上执行和返回?换句话说,从这个项目的角度来看,我想使这些方法不阻塞,而不是要求其他使用这些函数的应用程序在单独的线程中进行调用。

感谢

无阻塞线程

换句话说,从这个项目的角度来看,我想使这些方法不阻塞,而不是要求其他使用这些函数的应用程序在单独的线程中进行调用。

通常,在这种情况下,最好的方法通常是返回Task<T>。这允许调用方在必要时进行阻塞,或者使用新的awaitasync关键字与库进行干净的协调,而不会阻塞或强制它们移动到单独的线程。

如果使用.net 4.5,可以使用Task.Run在单独的线程上执行慢速操作,然后使用ConfigureAwait(false)在返回后不在主线程上执行。

Task.Run(() => <slow operatoion).ConfigureAwait(false);

不知道您使用的框架版本,请查看开始/结束异步模式。你应该考虑改变项目的API来实现它

http://msdn.microsoft.com/en-us/library/ms228963.aspx

我做过类似的事情。。。我建议您使用"select"而不是线程。。。。看看这个。。。如果它能帮助你

http://www.kegel.com/c10k.html