他们甚至开始,但最终这个过程从来没有得到过命中。 最初,当任务很简单时,我将它作为两个线程。有人建议异步/等待任务并且不熟悉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.
我执行了这个错误吗?在运行两个任务时我的问题是不可避免的吗?它们应该是线程吗?怎么避免
修改的
澄清。任务永远不会结束。它们将始终处理和监视,同时触发向观察者通知监视器输出或处理器输出的事件。
答案 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对象中完成 可枚举的集合已经完成。
等待所有提供的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)
我无法使任务均匀运行。 监视任务不断泛滥,而处理器任务获得任务的频率降低,这是我怀疑监视任务接管的时间。
由于没有人可以帮助我, 我的解决方案是将它们转回线程并设置线程的优先级。对于监视任务,此值低于正常,对于处理器任务,其值高于正常。 这似乎已经解决了我的问题。