Ton*_*Nam 6 c# multithreading task-parallel-library
我怎么能onCompleteCallBack在SomeAsyncMethod被调用的同一个线程上调用该方法?
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"); */
});
}
Run Code Online (Sandbox Code Playgroud)
虽然您不能保证在同一个线程上调用回调,但您可以保证它将在同一个同步上下文中调用(假设原始调用中存在一个).
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);
});
}
Run Code Online (Sandbox Code Playgroud)
例如,在Windows窗体或WPF程序中,上面将确保在GUI线程上调用回调(相应地通过消息循环或调度程序).类似于ASP.NET上下文.
话虽如此,我同意贾斯汀哈维的观点,即回归Task<T>意志可能是一个更好的设计.
| 归档时间: |
|
| 查看次数: |
2721 次 |
| 最近记录: |