mic*_*ael 11 c# wcf events design-patterns asynchronous
public class FooDataRepository
{
private MyServiceReferenceClient Client { get; set; }
public void FooClass()
{
Client = new MyServiceReferenceClient();
Client.SaveFooCompleted += Client_SaveFooCompleted;
Client.SaveBarCompleted += Client_SaveBarCompleted;
}
private void Client_SaveFooCompleted(Object sender, EventArgs e) { ... }
private void Client_SaveBarCompleted(Object sender, EventArgs e) { ... }
public void SaveFoo(Foo foo)
{
Client.SaveFooAsync(foo);
foreach (var bar in foo.Bars)
Client.SaveBarAsync(bar);
}
}
Run Code Online (Sandbox Code Playgroud)
一旦完成SaveFooAsync
所有SaveBarAsync
方法,我想在FooDataRepository类中做一些事情.是否存在基于N个异步调用完成的尝试执行单个操作的标准模式?
您可以使用TaskFactory.ContinueWhenAll来安排在所有任务完成后运行的代码.
Task[] tasks = new Task[3]
{
Task.Factory.StartNew(() => MethodA()),
Task.Factory.StartNew(() => MethodB()),
Task.Factory.StartNew(() => MethodC())
};
//This will not block.
Task.Factory.ContinueWhenAll(tasks, completedTasks => { RunSomeMethod(); });
Run Code Online (Sandbox Code Playgroud)
编辑:
关于使用任务组合异步方法调用的问题,如果类具有以异步方式调用方法的Begin/End方法,则可以使用Task.FromAsync
或者,您也可以使用Rx异步调用多个方法,然后观察所有方法何时完成.看看这个问题:我可以通过使用事件来创建我的AsyncResult来快捷开始/结束异步模式吗?(C#.Net 3.5,WCF)
归档时间: |
|
查看次数: |
369 次 |
最近记录: |