相关疑难解决方法(0)

有没有办法对异步方法进行单元测试?

我在.NET平台上使用Xunit和NMock.我正在测试一个方法是异步的表示模型.该方法创建一个异步任务并执行它,以便该方法立即返回,我需要检查的状态尚未准备好.

我可以在完成时设置一个标志而不修改SUT但这意味着我必须继续检查while循环中的标志,例如,可能超时.

我有什么选择?

.net unit-testing xunit.net nmock

21
推荐指数
2
解决办法
1万
查看次数

TAP全局异常处理程序

此代码抛出异常.是否可以定义将捕获它的应用程序全局处理程序?

string x = await DoSomethingAsync();
Run Code Online (Sandbox Code Playgroud)

使用.net 4.5/WPF

.net c# exception task-parallel-library async-await

18
推荐指数
1
解决办法
3444
查看次数

正在等待如何知道我的异步方法?

是否可以知道我的方法是否使用'await'关键字调用?

例如; 方法MyAsync()想知道是否等待它.

public void CallForBackground()
{
    MyAsync();
}

public async void CallAsync()
{
    bool result = await MyAsync();
}

public Task<bool> MyAsync()
{
    return Task.Run(() =>
    {
    //do something endlessly if its being called without 'await', but how do I know the caller is 'await'ing or not?
    //do something only once if its being called with 'await', but how do I know the caller is 'await'ing or not?


    return true;
    });
}
Run Code Online (Sandbox Code Playgroud)

编辑:添加了一个场景,我想知道是否使用'await'调用MyAsync();

1)假设MyAsync()使用TCP连接到远程服务器.

2)MyAsync()是异步的并且是等待的.

3)假设UserA想要异步连接到远程服务器,一旦完成,他/她想在继续他的过程之前知道它是否成功.类似于CallAsync()方法实现的东西.

4)UserB想要触发MyAsync()方法,而不是等待它完成.在这种情况下,UserB在向远程服务器发送消息之前不关心它是否已连接.类似于CallForBackground()方法实现的东西.

因此,对于UserA(等待),MyAsync()方法将尝试一次并返回状态.但对于UserB(不等待),方法将继续尝试.对于这个逻辑,MyAsync()需要知道它是否正在等待.我们如何实现这一目标?

c# async-await

0
推荐指数
1
解决办法
688
查看次数

如果正在运行的东西没有返回,Task.Run会返回什么?

我可以使用Task.Run这样的方式执行异步操作

await Task.Run(() =>
{
    DoSomeIOStuff();
    //throw new Exception("Custom Exception");
});
Run Code Online (Sandbox Code Playgroud)

有时我需要返回一个值

bool success = await Task.Run(() => ...
Run Code Online (Sandbox Code Playgroud)

但有时我不这样做.我读过你应该永远不会有一个返回void的异步方法,因为除其他外,你可以得到丢失的异常(如本问题所述).我测试了上面的Task.Run调用,其中有一个例外,发现所有数据都已处理,这意味着即使我没有返回任何内容,Task.Run仍然会返回一个任务.然后我试了一下

var temp = await Task.Run(() =>
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误,我不能将void赋给变量,这是我期望的,但这让我想知道Task.Run返回什么.它表现得像是在返回一个没有任务的任务,所以虽然我认为这不是正在发生的事情,但我还没有找到任何关于它正在做什么的文档.有什么想法吗?

c# task-parallel-library

0
推荐指数
1
解决办法
321
查看次数