我正在重构一个C#项目,该项目被几个完整的应用程序使用。该类与硬件交互,执行某些命令通常需要数百毫秒或更长时间。在许多情况下,我将替换前程序员编写的Thread.Wait()调用,以执行这些操作。
现在,该项目为使用它的几个项目提供的一些函数需要数百毫秒或更长时间才能执行,并将一个值返回给程序必须使用的调用程序。我的问题是,在这个项目中是否可以使用某种机制使这些调用在主线程之外的某个线程上执行和返回?换句话说,我希望从这个项目的角度使这些方法非阻塞,而不是要求使用这些函数的其他应用程序将调用放在一个单独的线程中。
谢谢
发布于 2013-08-29 23:43:53
换句话说,我希望从这个项目的角度使这些方法非阻塞,而不是要求使用这些函数的其他应用程序将调用放在一个单独的线程中。
通常,最好的方法通常是在这种场景中返回一个Task<T>。这允许调用方在必要时阻塞,或者使用新的await和async关键字与库进行干净的协调,而无需阻塞或强迫它们移动到单独的线程。
发布于 2013-08-30 03:16:02
如果使用的是.net 4.5,则可以使用Task.Run在单独的线程上执行慢速操作,然后在主线程返回时不执行ConfigureAwait(false)操作。
Task.Run(() => <slow operatoion).ConfigureAwait(false);发布于 2013-08-29 23:45:02
不知道您使用的是哪个版本的框架,请看一下开始/结束异步模式。您应该考虑更改项目的API以实现它。
http://msdn.microsoft.com/en-us/library/ms228963.aspx
https://stackoverflow.com/questions/18522621
复制相似问题