如何使用async和await实现Async Task从数据库中获取数据?

时间:2014-11-03 13:40:46

标签: c# wpf multithreading asynchronous async-await

我这样做。它正在工作,但这是一个推荐的方法来做到这一点。请评论

public async void LoadData()
{
    DataTable  dtAdditionsDetails = await LoadReportData(importID,
                                             InkeyCommon.ToInt32(cmbSellers.SelectedValue),
                                             fromDate,
                                             toDate);
    if (dtAdditionsDetails != null)
      dtaGrdAdditions.ItemSource = dtAdditionsDetails.DefaultView;
} 

public async Task<DataTable> LoadReportData(int? importID,
                                        int sellerID,
                                        DateTime? fromDate,
                                        DateTime? toDate)
{
    DataTable dtAdditionsDetails = new DataTable();

    //Get Report Data                                             
    await Task.Delay(1);

    dtAdditionsDetails = ReportsData.GetRptAdditions(importID,
                                  sellerID,
                                  fromDate,
                                  toDate);

    return dtAdditionsDetails;
}

2 个答案:

答案 0 :(得分:0)

为了正确使用await关键字,正在等待对象&#39;应该是...Async方法,就像GetStringAsync方法一样。正如@ ken2k正确指出的那样,你不能只是await任何方法。因此,要回答您的问题这是推荐的方法吗?,答案是否定的。

您可以在MSDN的Asynchronous Programming with Async and Await (C# and Visual Basic)页面中找到正确使用awaitasync关键字的方法,但是,如果您只是尝试运行同步方法异步,你就可以这样做:

public DataTable LoadData()
{
    DataTable dtAdditionsDetails = ...
    // Get your data here synchronously
    return dtAdditionsDetails;
} 

public async Task<DataTable> LoadDataAsync()
{
    DataTable dtAdditionsDetails = LoadData();
    return Task.Run(() => LoadData());
} 

...

public async void GetDataAsynchronously()
{
    DataTable dtAdditionsDetails = await LoadDataAsync();
} 

请注意,...Async方法(通常)返回Task<T>个对象,而不是任何内容,并且它们的名称以单词Async结尾。另请注意,只有...Async方法返回的数据和Task<T> {<1}}我们 awaitawait没有任何内容时。

答案 1 :(得分:0)

您可以尝试使用NPoco ORM

[HttpGet]
public async Task<IActionResult> GetAsync()

{
      IList myList = await FetchAsync();
}