如何在调用 SomeAsyncMethod
的同一线程上调用 onCompleteCallBack
方法?
public void SomeAsycMethod ( Action<object> onCompleteCallBack )
{
// get the current thread
/* var ThisThread = Thread.CurrentThread. */
Task.Factory.StartNew( () =>
{
Thread.Sleep( 1000 );// do some work;
// lastly call the onCompleteCallBack on 'ThisThread'
onCompleteCallBack( "some result" );
// I am looking for something like:
/* ThisThread.Invoke("some result"); */
});
}
最佳答案
虽然您不能保证您的回调会在同一个线程 上被调用,但您可以保证它会在同一个 中被调用Synchronization Context (假设原始调用中存在一个)。
public void SomeAsycMethod ( Action<object> onCompleteCallBack )
{
// get the current context
var context = SynchronizationContext.Current;
Task.Factory.StartNew( () =>
{
Thread.Sleep( 1000 );// do some work;
// lastly call the onCompleteCallBack on 'ThisThread'
onCompleteCallBack( "some result" );
// I am looking for something like:
context.Post(s => onCompleteCallBack ("some result"), null);
});
}
例如,在 Windows 窗体或 WPF 程序中,以上将确保在 GUI 线程上调用回调(相应地通过消息循环或调度程序)。对于 ASP.NET 上下文也是如此。
话虽如此,我同意 Justin Harvey 返回 Task<T>
的观点。可能会是更好的设计。
关于c# - 从特定线程调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13609615/