C# 使用C.net异步但顺序地调用多个方法
我想异步调用许多方法,但每个方法都应该在前一个方法完成后执行 到目前为止,我将所有方法包装在一个主方法下,并使用委托异步调用itMaster方法。 现在需求已经改变,在侧主方法中顺序调用的方法可能被调用,也可能不被调用,这取决于不同的状态。 通过检查不同的排列和组合,我可以在当前架构中实现它。但我希望异步但顺序地执行每个方法 这是我当前异步运行的实现注意:这是描述我的功能的示例代码 职能1 职能3 职能4 使用委托异步调用ExecuteCustomerRegistration方法 我想为下面的每个方法异步执行相同的工作 ExecuteCostomerRegistration方法如下 异步调用SaveCustomer SaveCustomer调用完成时异步调用CalulateRate 异步完成CalulateRate调用GenerateInvoice时 GenerateInvoice完成后,异步调用GenerateCustomerDocumentsC# 使用C.net异步但顺序地调用多个方法,c#,asp.net,vb.net,asynchronous,delegates,C#,Asp.net,Vb.net,Asynchronous,Delegates,我想异步调用许多方法,但每个方法都应该在前一个方法完成后执行 到目前为止,我将所有方法包装在一个主方法下,并使用委托异步调用itMaster方法。 现在需求已经改变,在侧主方法中顺序调用的方法可能被调用,也可能不被调用,这取决于不同的状态。 通过检查不同的排列和组合,我可以在当前架构中实现它。但我希望异步但顺序地执行每个方法 这是我当前异步运行的实现注意:这是描述我的功能的示例代码 职能1 职能3 职能4 使用委托异步调用ExecuteCustomerRegistration方法 我想为下面的每
请告诉我怎么做。目前我正在使用.net 4.0,您可以链接多个任务
var firstTask = new Task(() => SaveCustomer(custRegInfo.Customers);
var SecondTask = firsttask.ContinueWith((t)=> CalulateRate(custRegInfo.ApplicableRate)).
firstTask.Start();
请注意,这只是一个例子,并不是说这就是你应该如何做的。但它让您了解了如何使用任务和延续。这应该可以满足您的需要。您可以使用C 5编译器和Microsoft.Bcl.Async包吗?这将使事情变得更简单。@JonSkeet:现在不可能更新框架C5,我正在尝试实现TYYapproach@NeerajKumarGupta:我不是建议改变框架。C5是语言版本,不是框架版本。这就是我建议使用Microsoft.Bcl.Async的原因,它允许您在.NET 4中使用Async/await,只要您有一个C 5编译器。
private decimal CalulateRate(RateInfo applicableRate)
{
// Calculate rate and some other factors and save in database
}
GenerateInvoice(decimal calculatedRate,DateTime effectiveDate,
Int32 NumberOfDays)
{
// generating invoice and saving in database
}
GenerateCustomerDocuments(List<DocumentInfo> documentsToGenerate,
List<Customer> customers)
{
// generating diffrent documents for customers
}
Private void ExecuteCustomerRegistration(CustomerRegInfo custRegInfo)
{
//CustomerRegInfo is a class which contains all input parameter
object for below methotds
SaveCustomer(custRegInfo.Customers);
decimal rate = CalulateRate(custRegInfo.ApplicableRate);
GenerateInvoice(rate,custRegInfo.EffectiveDate,custRegInfo.NumberOfDays);
GenerateCustomerDocuments(custRegInfo.DocumentsToGenerate,
documentsToGenerate.Customers)
}
protected delegate void delg_DoProcess(CustomerRegInfo custRegInfo);
protected void btnRegisterCustomer_Click(object sender, EventArgs e)
{
delg_DoProcess doProc = new delg_DoProcess(ExecuteCustomerRegistration);
CustomerRegInfo custRegInfo = GetCustomersRegInfo();
doProc.BeginInvoke(custRegInfo, null, null);
}
var firstTask = new Task(() => SaveCustomer(custRegInfo.Customers);
var SecondTask = firsttask.ContinueWith((t)=> CalulateRate(custRegInfo.ApplicableRate)).
firstTask.Start();