以前,项目里有个.NetCore Web项目,为了效率,并没有采用单任务的方式。但经过测试以后,发现该功能存在如下问题:
该任务可以接受多个响应,但假如会有多个需要串行化的任务,由于任务本身并不能保证任务得到串行化处理,从而造成任务处理状态错误。
如果任务最终需要串行化处理,功能改为单任务,显然是必然的方法。
于是,修改任务的步骤如下:
1)添加[MethodImpl(MethodImplOptions.Synchronized)]方法
2)增加互斥量作为同步方法。
样例如下:
public class TestController : ApiController
{
//用互斥量作为同步工具
private static Mutex mutex = new Mutex();
[MethodImpl(MethodImplOptions.Synchronized)] //同步方法
public Resultly FinishTask(AppFinishTaskData data)
{
Resultly result = new Resultly();
if (mutex.WaitOne())
{
//执行代码
}
//释放互斥量,注意所有的return接口都要释放互斥量
mutex.ReleaseMutex();
return result;
}
}
此程序可以保证任务得到串行化处理。经测试,无问题。