Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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
C# 如何按顺序执行异步操作?_C#_Silverlight - Fatal编程技术网

C# 如何按顺序执行异步操作?

C# 如何按顺序执行异步操作?,c#,silverlight,C#,Silverlight,现在我正在使用类似于这个结构的东西 A.Completed += () => { B.Completed += () => { C.Completed += () => { // } C(); } B(); } A(); 而且对它不太满意。有没有更好、更干净的方法来执行此类连续/并发操作 我看了一下Rx框架,但它是为其他任务设计的,对于我的问题来说,它看起来太过分了。它不太干净,但您可以看看Backgrou

现在我正在使用类似于这个结构的东西

A.Completed += () =>
{ B.Completed += () =>
  {  C.Completed += () =>
     {
       //
     }
     C();
   }
   B();
 }  
 A();
而且对它不太满意。有没有更好、更干净的方法来执行此类连续/并发操作

我看了一下Rx框架,但它是为其他任务设计的,对于我的问题来说,它看起来太过分了。

它不太干净,但您可以看看
BackgroundWorker

BackgroundWorker A = new BackgroundWorker();
A.DoWork += (s, e) => AMethod();
A.RunWorkerCompleted += (s, e) => BMethod();

BackgroundWorker B = new BackgroundWorker();
B.RunWorkerCompleted += (s, e) => CMethod();

//etc

您并没有真的在代码上削减太多,但我想说它更干净了。

看一看。它基于Rx,将大大简化您的代码。下面是一个示例:

不需要嵌套设置已完成的事件,除非有人可能在A完成之前实际调用B或C。如果你把它分开,下面是它的样子:

A.Completed += () => { B(); };
B.Completed += () => { C(); };  
C.Completed += () => { //   }; 

A();

我认为去掉嵌套实际上使它更干净。

你可以看看TPL。您可以这样编写代码:

等待C#5.0并使用新的
async
Wait
关键字

以下是一些关于此的初步链接:


对此要非常小心。我通常建议避免线程来处理异步程序流。有比线程更好的结构来组织代码。代码可读性和执行的复杂性是不值得的。您推荐的结构有哪些?具有相同的填充。任何具有当前语言可能性的实现都会模糊代码。希望C#5能很快发布。同时,这不是一个严肃的答案。你也可以查看信号器源代码,了解类似于Then,Catch fluent use的内容。