Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Task parallel library ToTask使OnCompleted在不同的线程上执行_Task Parallel Library_System.reactive - Fatal编程技术网

Task parallel library ToTask使OnCompleted在不同的线程上执行

Task parallel library ToTask使OnCompleted在不同的线程上执行,task-parallel-library,system.reactive,Task Parallel Library,System.reactive,代码: var sc=newtestscheduler(); 可观测计时器(时间跨度从秒(5),sc) .ToTask() .TooObservable()文件 .Do(=>Console.WriteLine(“下一步:”+Thread.CurrentThread.ManagedThreadId), ()=>Console.WriteLine(“完成时:+Thread.CurrentThread.ManagedThreadId)) .Subscribe(); WriteLine(“调用:”+Th

代码:

var sc=newtestscheduler();
可观测计时器(时间跨度从秒(5),sc)
.ToTask()
.TooObservable()文件
.Do(=>Console.WriteLine(“下一步:”+Thread.CurrentThread.ManagedThreadId),
()=>Console.WriteLine(“完成时:+Thread.CurrentThread.ManagedThreadId))
.Subscribe();
WriteLine(“调用:”+Thread.CurrentThread.ManagedThreadId);
sc.AdvanceBy(时间跨度从秒(5)开始,滴答声);
输出:

call: 11
on next: 8
on complete: 8
如果同时删除ToTask和ToObservable,那么所有内容都将在同一个线程上执行。在我看来,TPL计划不知何故没有完成到任务池中,但我在源代码中找不到它

有人能帮我理解这里发生了什么吗

DotNetFiddle链接:

Task.ToObservable()
使用
Task.ContinueWith()
添加任务延续,以在任务完成时触发可观察内容。默认情况下,
Task.ContinueWith()

Rx.Net最近添加了一个超负荷的
ToObservable
,它接受
IScheduler


有关更多详细信息,请参阅Rx.Net。

这是另一种情况,您不应混合使用单子。一般来说,你应该在
Task
IObservable
中进行处理,只有在你绝对需要的情况下才能更改monad。我有一些服务返回任务,需要以Rx方式进行处理。所以我没有选择的余地,没关系。如果你真的需要那么一切都好。正是这种来回的变化导致了悲伤。