【发布时间】:2017-10-16 08:11:14
【问题描述】:
我有一个实现ServiceContract 的 WCF 服务。为简单起见,说ServiceContract 只有一种方法:
public interface ServiceContract
{
String AddNewData(T arg1);
}
这里AddNewData可以添加数据到Database1或Database2取决于
arg1 的值。在给定值arg1 的某个时间点,比如val1,我们试图将存储从Database1 切换到Database2,这个过程很耗时(比如说,大约需要一分钟)。在此期间,所有对arg1 == val1 的调用都应该暂停,但我们仍然应该能够为arg1 的所有其他值执行AddNewData,即我们不应该阻塞主线程。
我在想,因为AddNewData 是调用的入口点,我想我希望能够创建执行AddNewData 的Task 但在arg1 == val1 的情况下,我不执行任务但是让它暂停(处于未启动状态),当从Database1 切换到Database2 时,我可以运行/启动这个暂停的任务。
我在考虑任务,因为我不想阻止主线程执行 AddNewData 的其他值 arg1。
现在我不确定如何在输入给定值arg1 的方法之前决定是否要启动AddNewData。据我了解,进入该方法后我无法暂停AddNewData 的执行,因为它会阻塞主线程。我查看了IDispatchMessageInspector.AfterReceiveRequest ,但不知道如何利用它。
任何人对我应该如何处理有任何建议。我是 WCF 和多线程的新手,所以如果我在这里遗漏了什么,请见谅。
【问题讨论】:
标签: c# multithreading wcf async-await