我正在做这个。它正在工作,但这是推荐的方法。请发表评论
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;
}
为了await
正确使用关键字,被“等待”的对象实际上应该是一种...Async
方法,就像该GetStringAsync
方法一样。正如@ ken2k正确指出的那样,您不能只使用await
任何方法。因此,要回答您的问题,这是推荐的方法吗?, 答案是不。
您可以在MSDN上的Async and Await异步编程(C#和Visual Basic)页中找到如何正确使用await
andasync
关键字,但是,如果您只是尝试异步运行同步方法,则可以这样做这:
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>
,而我们没有 await
的时候没有什么await
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句