我最近开始研究一种利用任务并行性的新应用程序。我刚刚开始编写任务框架,但是最近在SO上发布了一些关于新的System.Threading.Tasks命名空间的帖子,这对我来说可能是有用的(我宁愿使用现有的框架而不是自己的框架)。 / p>
然而,查看MSDN我还没有看到如何/如果,我可以实现我正在寻找的功能:
task
对象中)有人能指出我的例子/告诉我如何实现这一目标吗?欢呼声。
C#使用案例(在SO中输入,请提供任何语法错误/拼写错误)
** note Do()
/ DoAfter()
不应该阻止调用线程*
class Application ()
{
Task LeafTask = new Task (LeafWork) {PriorityHint = High, MaxConcurrent = 1};
var Tree = new TaskTree (LeafTask);
Task TraverseTask = new Task (Tree.Traverse);
Task WorkTask = new Task (MoreWork);
Task RunTask = new Task (Run);
Object SharedLeafWorkObject = new Object ();
void Entry ()
{
RunTask.Do ();
RunTask.Join (); // Use this thread for task processing until all invocations of RunTask are complete
}
void Run(){
TraverseTask.Do ();
// Wait for TraverseTask to make sure all leaf tasks are invoked before waiting on them
WorkTask.DoAfter (new [] {TraverseTask, LeafTask});
if (running){
RunTask.DoAfter (WorkTask); // Keep at least one RunTask alive to prevent Join from 'unblocking'
}
else
{
TraverseTask.Join();
WorkTask.Join ();
}
}
void LeafWork (Object leaf){
lock (SharedLeafWorkObject) // Fake a shared resource
{
Thread.Sleep (200); // 'work'
}
}
void MoreWork ()
{
Thread.Sleep (2000); // this one takes a while
}
}
class TaskTreeNode<TItem>
{
Task LeafTask; // = Application::LeafTask
TItem Item;
void Traverse ()
{
if (isLeaf)
{
// LeafTask set in C-Tor or elsewhere
LeafTask.Do(this.Item);
//Edit
//LeafTask.Do(this.Item, this.Depth); // Deeper items get higher priority
return;
}
foreach (var child in this.children)
{
child.Traverse ();
}
}
}
答案 0 :(得分:4)
这里有很多例子:
http://code.msdn.microsoft.com/ParExtSamples
有一篇很好的白皮书,其中涵盖了您在上面提到的许多细节:
“并行编程模式:使用.NET Framework 4理解和应用并行模式”
我认为你可以做你在问题中列出的所有事情。