假设我的课程MethodA
和MethodB
中有两种方法。这些方法是在异步中运行的,我不希望它们同时运行。
在应用程序中,MethodA
由用户调用,但MethodB
由后台线程中的Timer运行。
我如何看待C#ish伪代码中的实现:
class MyClass
{
private static object _lock = new object();
public async Task MethodA()
{
lock(_lock)
{
await DoSomeStuff();
}
}
public async Task MethodB()
{
if(Monitor.IsEntered(_lock)
return;
lock(_lock)
{
await DoSomeStuff();
}
}
}
所以第一个问题是 - 上述方法是否正确?我想这更像https://codereview.stackexchange.com/的问题。
所以第二个问题是 - 假设方法是正确的,我如何进行单元测试,MethodA
等待MethodB
,而MethodB
在{MethodA
时不运行1}}正在运行?或者我如何重构它以使其可测试?
编辑:相应于评论,从使用标志变为锁定。