1
我想建立一個WCF服務, -單實例WCF服務(可以限制)
- 是單實例
- 允許客戶端進行多次請求功能(例如StartJob )
StarJob(請求)「隊列」的請求TaskFactory(一個實例)的併發任務計劃運行(如任務工廠任務是實現爲每個example
COM pleted,儘管任務運行和更多的要求都在響應返回
- ,它們會排隊(提供最大併發數達到)
目的是建立一個接受來自客戶端的請求的系統和將它們排隊等待處理。
當前,我的代碼(如下所示)在不考慮任務調度程序的最大併發數的情況下同時運行所有請求。
問題
- 我缺少什麼呢?
- 任何很好的例子/參考我可以看看? (我敢肯定這是不是一種罕見的用例)
代碼
IService
[ServiceContract]
public interface ISupportService
{
[OperationContract]
Task<TaskResponse> StartTask(TaskRequest taskRequest);
}
服務
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class SupportService : ISupportService
{
private static TaskRequestHandler taskRequestHandler;
public SupportService()
{
taskRequestHandler = TaskRequestHandler.GetInstance();
}
public Task<TaskResponse> StartTask(TaskRequest taskRequest)
{
var tcs = new TaskCompletionSource<TaskResponse>();
if (!IsTaskRequestValid(taskRequest))
tcs.SetResult(new TaskResponse()});
taskRequestHandler.StartTaskAsync(taskRequest, lockHandler).ContinueWith(task => { tcs.SetResult(task.Result); });
return tcs.Task;
}
}
TaskRequestHandler
public class TaskRequestHandler
{
private ConcurrentTaskScheduler taskScheduler;
private TaskFactory taskFactory;
private TaskRequestHandler()
{
taskScheduler = new ConcurrentTaskScheduler(2);
taskFactory = new TaskFactory(taskScheduler);
}
private Task<TaskResponse> StartTaskAsync (TaskRequest request, LockHandler lockHandler)
{
var tcs = new TaskCompletionSource<TaskResponse>();
taskFactory.StartNew(() =>
{
//Some task with tcs.SetResults()
});
return tcs.Task;
}
}
這個問題可以幫助你對排隊和同意:http://stackoverflow.com/questions/7122608/ WCF-concurrencymode單和instancecontextmode-percall/7149683#7149683 –