我的SDK中有以下代码行。
public async Task<Object> DoSomething(String v1, string v2)
{
......
var response = await _restClient.DeleteAsync<Object, ISomeAPIError>(endpoint)
......
}
当我的测试代码使用async和await pattern
时,此代码可以正常工作[TestMethod]
public async Task Test_DomeSomething()
{
......
await x.DoSomething("x", "y");
......
}
但是当我以非同步方式编写相同的测试时,我得到“任务被取消了。”
[TestMethod]
public void Test_DomeSomething_Non_Async()
{
......
x.DoSomething("x", "y");
......
}
所以,一个通过,另一个失败。我不希望我的客户端代码强制非异步,我不想更改我的SDK使用.Result并使其非异步。
在互联网上搜索有关设置超时属性的讨论,但它没有意义,因为它已设置超过一分钟,其中一个测试正在运行。
有什么建议吗?
答案 0 :(得分:1)
await
不会使您的代码异步。使用异步函数使其异步。 await
只是暂停包含方法,直到等待的任务完成。
因此,我可以说你不了解await
的基础知识。使用技术而不理解它是危险的。
仅通过省略await
,您无法进行任何同步通话。如果没有await
,异步调用将“在后台”运行,并与其余代码同时运行。谁知道会发生什么。并发很危险。
我不知道该向你推荐什么。可能你应该使用await
。你有什么理由不能吗?