我这样做。它正在工作,但这是一个推荐的方法来做到这一点。请评论
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;
}
答案 0 :(得分:0)
为了正确使用await
关键字,正在等待对象&#39;应该是...Async
方法,就像GetStringAsync
方法一样。正如@ ken2k正确指出的那样,你不能只是await
任何方法。因此,要回答您的问题这是推荐的方法吗?,答案是否定的。
您可以在MSDN的Asynchronous Programming with Async and Await (C# and Visual Basic)页面中找到正确使用await
和async
关键字的方法,但是,如果您只是尝试运行同步方法异步,你就可以这样做:
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}}我们不 await
当await
没有任何内容时。
答案 1 :(得分:0)
您可以尝试使用NPoco ORM
[HttpGet]
public async Task<IActionResult> GetAsync()
{
IList myList = await FetchAsync();
}