【发布时间】:2014-05-07 18:49:00
【问题描述】:
我的 SDK 中有以下代码行。
public async Task<Object> DoSomething(String v1, string v2)
{
......
var response = await _restClient.DeleteAsync<Object, ISomeAPIError>(endpoint)
......
}
当我的测试代码使用 async 和 await 模式时,此代码可以正常工作
[TestMethod]
public async Task Test_DomeSomething()
{
......
await x.DoSomething("x", "y");
......
}
但是当我以非 aync 方式编写相同的测试时,我得到“任务被取消”。
[TestMethod]
public void Test_DomeSomething_Non_Async()
{
......
x.DoSomething("x", "y");
......
}
所以,一个通过,另一个失败。我不希望我的客户端代码强制非异步,也不想将我的 SDK 更改为使用 .Result 并使其非异步。
在网上搜索说要设置 timeout 属性,但这没有意义,因为它已经设置了超过一分钟,并且其中一个测试正在运行。
有什么建议吗?
【问题讨论】:
-
我相信那是因为你真的希望
DoSomething返回void。 -
我想取回一些值。只是为了遵循您的建议,即使我将方法签名更改为返回 void 它也失败并出现相同的错误。公共异步任务 DoSomething(字符串 v1,字符串 v2)
-
如果你的代码是异步的,那么它的调用者应该是异步的。无需尝试强制“同步”调用。
-
不能
x.DoSomething().Wait()等待任务吗?
标签: c# task async-await