C#队列从队列执行任务时返回结果的任务

C#队列从队列执行任务时返回结果的任务,c#,multithreading,queue,singleton,task,C#,Multithreading,Queue,Singleton,Task,我的结构如下: //function called from Node.js public Task<object> NodeCall (IDictionary<string, object> payload) { Func<object, Task<object>> changed = (Func<object, Task<object>>) payload["changed"]; return

我的结构如下:

 //function called from Node.js
 public Task<object> NodeCall (IDictionary<string, object> payload) {
     Func<object, Task<object>> changed = (Func<object, Task<object>>) payload["changed"];

     return Task.Run (async () => await OnQuery (payload["request"], changed));
 }

public async Task<object> OnQuery (dynamic request, dynamic payload = null) {
    var result = new QueryCallback ();
    //...code...
    return result
}
//从Node.js调用函数
公共任务节点调用(IDictionary有效负载){
Func changed=(Func)有效负载[“changed”];
return Task.Run(async()=>wait-OnQuery(负载[“请求”],已更改));
}
公共异步任务OnQuery(动态请求,动态负载=null){
var result=newquerycallback();
//…代码。。。
返回结果
}
在“OnQuery”代码中,我应该调用singleton类的函数,并且我需要对调用进行排队。问题是,我无法处理线程响应并等待任务发送响应的结果

我的最终结果是:将任务放入队列中,当单例退出我的任务并完成目标函数时,我返回结果。 在while中,OnQuery任务应该等待而不返回任何内容

有人能帮我吗

谢谢

编辑1
Servy签署了尽可能多的副本,但我不确定它是否能处理结果。。。如果这是正确的方法,有人能做一个更好的样品吗?我不清楚

您可以使用
信号量lim
,如下所示:

private readonly SemaphoreSlim\u mutex=new SemaphoreSlim(1);
公共异步任务OnQuery(动态请求,动态负载=null)
{
wait_mutex.WaitAsync();
尝试
{
var result=newquerycallback();
//…代码。。。
返回结果
}
最后
{
_mutex.Release();
}
}

旁注:这在技术上不是一个队列,因为严格的FIFO顺序不能保证。然而,这是一种强制以独占方式访问共享资源的方法,这应该足以满足您的需要。

您需要准确地排队等待哪些呼叫?@MindSwipe您的意思是什么?OnQuery任务应该在队列中,等待它从队列中删除并执行,并且只返回下一个结果。但我也考虑别人的接近。
private readonly SemaphoreSlim _mutex = new SemaphoreSlim(1);
public async Task<object> OnQuery (dynamic request, dynamic payload = null)
{
  await _mutex.WaitAsync();
  try
  {
    var result = new QueryCallback ();
    //...code...
    return result
  }
  finally
  {
    _mutex.Release();
  }
}