Asynchronous 这个线程代码有解释吗?
因此,我们遇到了一些与此非常类似的代码。我只是想知道是否有人能给我解释一下 看看它是如何使用RX调度器的,然后是并行的Asynchronous 这个线程代码有解释吗?,asynchronous,task-parallel-library,system.reactive,Asynchronous,Task Parallel Library,System.reactive,因此,我们遇到了一些与此非常类似的代码。我只是想知道是否有人能给我解释一下 看看它是如何使用RX调度器的,然后是并行的 IDisposable subscription = someObservable.ObserveOn(ThreadPoolScheduler.Instance) .Subscribe(o => { Parallel.ForEach(xxxs, x =>
IDisposable subscription = someObservable.ObserveOn(ThreadPoolScheduler.Instance)
.Subscribe(o =>
{
Parallel.ForEach(xxxs,
x =>
{
var theKey = x.Key;
if (!theTasks.ContainsKey(theKey) ||
theTasks.ContainsKey(theKey) && theTasks[theKey].IsCompleted)
{
theTasks[theKey] = Task.Factory.StartNew(
() =>
{
.....
}
catch (CommunicationObjectAbortedException ex)
{
....
}
catch (ObjectDisposedException ex)
{
....
}
catch (Exception e)
{
....
}
});
}
});
},
ex =>
{
....
},
() =>
{
....
});
}
我知道所有这些事情单独做什么,但不确定这里的组合线程效果是什么。谁能猜一猜啊,是的,是同时发生的
ThreadPoolScheduler
调度线程池上的工作,该线程池不同于任务池ThreadPoolScheduler
用于在任务池不可用的平台上执行任务-如果可能,首选TaskPoolScheduler
这感觉就像作者试图通过使用线程池为手头的任务保存任务池(请原谅这个双关语)
Parallel.ForEach
阻塞,直到循环完成。因此,当它在线程池上运行时,当发出新项时,对线程池中借用的线程执行下一个ForEach
至于内部位,编写器希望每个唯一键运行一个任务,如果尚未运行。啊,是的,并发性
ThreadPoolScheduler
调度线程池上的工作,该线程池不同于任务池ThreadPoolScheduler
用于在任务池不可用的平台上执行任务-如果可能,首选TaskPoolScheduler
这感觉就像作者试图通过使用线程池为手头的任务保存任务池(请原谅这个双关语)
Parallel.ForEach
阻塞,直到循环完成。因此,当它在线程池上运行时,当发出新项时,对线程池中借用的线程执行下一个ForEach
至于内部位,编写器希望每个唯一键运行一个任务
,如果该任务尚未运行