Служба WCF с одним экземпляром и параллельными задачами (которые могут быть ограничены)C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Служба WCF с одним экземпляром и параллельными задачами (которые могут быть ограничены)

Сообщение Anonymous »

Я пытаюсь создать службу WCF, которая -
  • Является единственным экземпляром
  • Позволяет клиентам выполнять множественные запросы к функциям (например, StartJob)
  • StarJob(request) 'очереди ' запрос к TaskFactory (один экземпляр), выполняющийся по расписанию параллельных задач (реализован согласно примеру
  • По мере завершения задач в фабрике задач , ответ возвращается
  • Пока задача выполняется и поступает больше запросов, они помещаются в очередь (при условии, что достигнуто максимальное число одновременных вызовов)< /p>
Цель — создать систему, которая принимает запросы от клиентов и ставит их в очередь для обработки.
В настоящее время мой код (показанный ниже) выполняет все запросы одновременно, не принимая во внимание максимальное количество одновременных задач планировщика.
Что мне не хватает?
Код
IService
[ServiceContract]
public interface ISupportService
{
[OperationContract]
Task 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 StartTask(TaskRequest taskRequest)
{
var tcs = new TaskCompletionSource();

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 StartTaskAsync (TaskRequest request, LockHandler lockHandler)
{
var tcs = new TaskCompletionSource();
taskFactory.StartNew(() =>
{
//Some task with tcs.SetResults()
});

return tcs.Task;
}
}


Подробнее здесь: https://stackoverflow.com/questions/387 ... be-limited
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»