1

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

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

谢谢

4

4 回答 4

4

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

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

于 2013-08-29T23:43:53.917 回答
1

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

Task.Run(() => <slow operatoion).ConfigureAwait(false);
于 2013-08-30T03:16:02.950 回答
0

我做过类似的事情......我建议你使用“选择”而不是使用线程......看看这个......如果它对你有帮助

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

于 2013-08-29T23:51:35.560 回答
0

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

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

于 2013-08-29T23:45:02.340 回答