如何使用均匀的cpu时间分布运行两个任务

时间:2018-06-15 07:41:23

标签: c# async-await task thread-priority

他们甚至开始,但最终这个过程从来没有得到过命中。 最初,当任务很简单时,我将它作为两个线程。有人建议异步/等待任务并且不熟悉c#我没有理由怀疑它们。

int i = 0;
var x = Unsafe.As<int, Foo>(ref i); // <- Error CS0306 The type 'Foo' may not be used as a type argument.

我执行了这个错误吗?在运行两个任务时我的问题是不可避免的吗?它们应该是线程吗?怎么避免

修改

澄清。任务永远不会结束。它们将始终处理和监视,同时触发向观察者通知监视器输出或处理器输出的事件。

3 个答案:

答案 0 :(得分:1)

如果等待Task.WhenAll,那么它将等待所有任务都被处理

await Task.WhenAll(monitorTasks, processTasks)

https://msdn.microsoft.com/en-us/library/system.threading.tasks.task.whenall(v=vs.110).aspx

答案 1 :(得分:0)

Task.WaitAll阻止当前线程,直到所有内容都完成。

Task.WhenAll返回一个任务,代表等待一切都完成的动作。

Task.WhenAll Method

  

创建一个任务,该任务将在所有Task对象中完成   可枚举的集合已经完成。

Task.WaitAll Method

  

等待所有提供的Task对象完成执行。

如果你想阻止等待已启动的任务(这似乎是你想要的)

Task monitorTasks= new Task (monitor.start );
Task processTasks= new Task( () => processor.process(ref param, param2) );

monitorTasks.Start();
processTasks.Start();

Task.WaitAll(new Task[]{monitorTasks,processTasks})

如果您使用的是async await,请参阅Asynchronous programming with async and await

然后你可以做这样的事情

var task1 = DoWorkAsync();
var task2 = DoMoreWorkAsync();

await Task.WhenAll(task1, task2);

答案 2 :(得分:0)

我无法使任务均匀运行。 监视任务不断泛滥,而处理器任务获得任务的频率降低,这是我怀疑监视任务接管的时间。

由于没有人可以帮助我, 我的解决方案是将它们转回线程并设置线程的优先级。对于监视任务,此值低于正常,对于处理器任务,其值高于正常。 这似乎已经解决了我的问题。