我正在开发一个Azure函数,它与我的表通信并更新表中的数据。我最近发现Microsoft.WindowsAzure.Storage
包现在只有Async函数,我对这些函数不熟悉。
在我用于测试的函数中,如果行存在则返回true,否则返回false。如果行存在,它可以工作,但是如果该行不存在,程序将挂起(因为它正在等待响应)。
任何人都可以帮助我吗?
这是我的代码:
public static bool rowExists(CloudTable table, string city, string state)
{
TableOperation tOP = TableOperation.Retrieve<SickCity>(city, state);
Task<TableResult> result = table.ExecuteAsync(tOP);
if (result == null)
return false;
else
return true;
}
编辑:
这是我正在调用rowExists的地方
log.Info($"Does the row \"New York, NY\" exist? {rowExists(sickTable, "New York", "NY")}");
答案 0 :(得分:4)
您没有得到预期的结果,因为您的代码不等待异步请求完成。您需要更改功能以正确调用ExecuteAsync
:
public static async Task<bool> rowExists(CloudTable table, string city, string state)
{
TableOperation tOP = TableOperation.Retrieve<SickCity>(city, state);
var result = await table.ExecuteAsync(tOP);
if (result == null)
return false;
else
return true;
}
ExecuteAsync
返回Task
,它不会包含实际结果,直到将来某个时间(异步操作完成时)。 await
关键字会导致您的代码暂停&#34;暂停&#34;在该行上等待ExecuteAsync
任务包含实际值。然后你的逻辑可以继续。
请注意,方法签名已更改:它现在是async Task<bool> rowExists
。您的方法现在也返回Task
,这意味着调用此方法的代码也必须使用await
。这是处理数据库和网络调用等异步操作的常见模式。
如果这看起来很奇怪,你可以在这里阅读有关async / await模式的更多信息: