这是代码段,我得到警告:
此异步方法缺少等待操作符,将同步运行。考虑使用await运算符来等待非阻塞调用。
public async Task<ActionResult> CreateRequest([FromBody] DnsRecordDto RecordRequested)
{
var result = IsRecordRequestedNull()
}
public bool IsRecordRequestedNull(DnsRecordDto RecordRequested)
{
bool flag = false;
if (RecordRequested == null)
{
flag = true;
_commonRepository.SaveLogItem(Constants.TransactionFailedBadData, Constants.STARTING, transId, LogLevel.Trace);
}
return flag;
}
我不确定如何解决此警告
我真的需要用async关键字修饰IsRecordRequestedNull并使它运行异步,只是因为我是从async方法调用此方法吗?
在这种情况下,我应该忽略出现的警告吗??
答案 0 :(得分:10)
使用async
关键字本身不会使方法异步运行。它仅允许使用await
运算符。如果您不使用await
,请不要使用async
。
警告只是说:“您没有使用await
,为什么要使用async
?”
如果您不使用或不能使用await
,则解决方法是删除async
关键字:
public ActionResult CreateRequest([FromBody] DnsRecordDto RecordRequested)
{
var result = IsRecordRequestedNull()
}
如果该SaveLogItem
方法有一个异步版本(也许是SaveLogItemAsync
?),那么您可以等待它并制作所有async
:
public async Task<ActionResult> CreateRequest([FromBody] DnsRecordDto RecordRequested)
{
var result = await IsRecordRequestedNull()
}
public async Task<bool> IsRecordRequestedNull(DnsRecordDto RecordRequested)
{
bool flag = false;
if (RecordRequested == null)
{
flag = true;
await _commonRepository.SaveLogItemAsync(Constants.TransactionFailedBadData, Constants.STARTING, transId, LogLevel.Trace);
}
return flag;
}
但是我不知道该SaveLogItem
方法的来源,所以我不能说是否有一个异步版本可供您使用。
如果这是您自己编写的方法,并且希望它异步运行,那么这就是您需要开始的地方。查看它在哪里执行任何I / O操作(读取/写入文件,发出网络请求等),并将其更改为使用这些调用的async
版本(通常带有后缀“ Async”)并等待它们。然后,您可以将该方法及其调用的任何方法更改为async
。
Microsoft有一系列关于异步编程的非常出色的文章,您可能会从中受益:Asynchronous programming with async and await
答案 1 :(得分:1)
您的方法用 async 关键字修饰,这意味着您想异步运行代码,但是 async 关键字本身不执行任何操作,您必须在您的方法主体中的某个位置进行 await 。因此,就像@Gabriel Luci所建议的那样,检查是否有SaveLogItem
的异步版本,以便可以 await 。如果没有,只需删除 async ,就可以了。