I have the following Async method:
private async void ProcessSearch()
{
// get catalogs on first search
if (_invoiceTypes == null && _invoice
Minor changes to what you've got there will do what you want. You can start new tasks and then do other stuff and then await just before you go on. As @Noseratio has helpfully pointed out, this snippet below isn't production-ready because I'm not checking for error conditions (like null
references, etc). The point is that you can succinctly and elegantly do these things in parallel without having to resort to using very much of the Tasks API. One adjustment I made worth pointing out is that you want to move the calls to Dispose
into the continuation (i.e., after all your await
s) because if you try to Dispose
right after calling the *Async methods you stand a good chance of killing off your WCF clients halfway through getting a response and the awaits
will probably wind up throwing exceptions (which I'm not catching).
private async void ProcessSearchAsync()
{
Data.ConfigurationWCF confWcf = new Data.ConfigurationWCF();
Task*typeof _invoiceTypes*/> t1;
Task*typeof _invoiceAccounts*/> t2;
// get catalogs on first search
if (_invoiceTypes == null && _invoiceAccounts == null)
{
t1 = confWcf.GetInvoiceTypesAsync(MainForm.State.Entity);
t2 = confWcf.GetInvoiceAccountsAsync(MainForm.State.Entity);
}
DataSeekWCF seekWcf = new DataSeekWCF();
Task*typeof _ds*/> t3 = seekWcf.SearchInvoiceAdminAsync(new Guid(cboEmployer.Value.ToString()), new Guid(cboGroup.Value.ToString()), txtSearchInvoiceNumber.Text, chkSearchLike.Checked, txtSearchFolio.Text, Convert.ToInt32(txtYear.Value));
_invoiceTypes = await t1;
_invoiceAccounts = await t2;
_ds = await t3;
if (_ds != null)
{
SetupInvoiceGrid();
}
confWcf.Dispose();
seekWcf.Dispose();
}