异步/等待问题,得到“任务被取消”。

时间:2014-05-07 18:49:00

标签: c# task async-await

我的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并使其非异步。

在互联网上搜索有关设置超时属性的讨论,但它没有意义,因为它已设置超过一分钟,其中一个测试正在运行。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

await不会使您的代码异步。使用异步函数使其异步。 await只是暂停包含方法,直到等待的任务完成。

因此,我可以说你不了解await的基础知识。使用技术而不理解它是危险的。

仅通过省略await,您无法进行任何同步通话。如果没有await,异步调用将“在后台”运行,并与其余代码同时运行。谁知道会发生什么。并发很危险。

我不知道该向你推荐什么。可能你应该使用await。你有什么理由不能吗?