【发布时间】:2022-08-19 09:39:16
【问题描述】:
在现代化过程中,我试图更新遗留库以使用客户端 WCF 服务。以下内容接近我需要的内容,但我不知道如何将创建的任务添加到一次只处理一个请求的队列中。
[ServiceContract(Name=\"MyService\", SessionMode=Session.Required]
public interface IMyServiceContract
{
[OperationContract()]
Task<string> ExecuteRequestAsync(Action action);
}
public class MyService: IMyServiceContract
{
// How do I get this piece in a task queue?
public async Task<string> ExecuteRequestAsync(Request request)
{
return await Task.Factory.StartNew(() => request.Execute();)
}
}
我查看了 Servy 共享的 TaskQueue(Best way in .NET to manage queue of tasks on a separate (single) thread)。但是,我在将两者结合成有效的东西时遇到了麻烦。当我尝试将我的任务添加到下面的 TaskQueue 时,该任务永远不会运行。我知道我错过了一些东西,所以非常感谢任何帮助。
public class TaskQueue
{
private SemaphoreSlim semaphore;
public TaskQueue()
{
semaphore = new SemaphoreSlim(1);
}
public async Task<T> Enqueue<T>(Func<Task<T>> taskGenerator)
{
await semaphore.WaitAsync();
try
{
return await taskGenerator();
}
finally
{
semaphore.Release();
}
}
public async Task Enqueue(Func<Task> taskGenerator)
{
await semaphore.WaitAsync();
try
{
await taskGenerator();
}
finally
{
semaphore.Release();
}
}
}
谢谢
-
有日志信息吗?如果可能,打印出日志以查看报告了哪些错误。