TaskCompletionSource死锁?

时间:2019-05-09 07:10:43

标签: c#

我在无法使用代码访问WCF服务时使用TaskCompletionSource。因为如果我直接使用他们服务上的方法而不使用TaskCompletionSource,它将不会返回任何记录。

在我的网络api操作中,我拥有

[HttpGet]
public Task<IList<Details>> GetDetails()
{
  var tcs = new TaskCompletionSource<IList<Details>>();
  ServiceProxy.Instance.ListDetailsAsync((Exception ex,List<Details> details, 
  object obj)=>
  {
     tcs.SetResult(details);
  }, null);
 return tcs.Task;
}

他们创建的ServiceProxy显示如下

public void ListDetailsAsync(Action<Exception, List<Details>, object> final, object context)
{
    CallClient<object, List<string>, List<Details>>("Get all details", null, final, context, DetailsReadAll_Call);
}

void DetailsReadAll_Call(WCFServiceClient client, object input1, object detailsState)
{
    client.GetAllDetailsCompleted += GetAllDetails_Completed;
    client.GetAllDetailsAsync(detailsState);
}

void GetAllDetails_Completed(object sender, GetAllDetailsCompletedEventArgs e)
{
   var detailsState = (DetailState<List<string>, List<Details>>)e.DetailState;

   detailsState.Perform(e.Error, e.dex, delegate() { return e.Result.ToList(); }, delegate(List<string> result1, out List<Details> output1)
   {
       List<Details> details= new List<Details>();

         foreach (string detailXml in result1)
         {
            details.Add(ObjectSerializer.Parse<Details>(detailXml));
         }

         output1 = details;
    });
}

所有这些代码都可以在我的VS2012上的localhost上正常工作,这意味着它可以返回记录而没有任何错误。但是,当我将其部署在服务器上时,它不会返回任何记录,而在开发工具上,它将显示待处理状态。由于我无法在VS2012上复制该问题,因此整天都需要花费一整天的时间,因此不知道发生在哪里以及为什么发生。真的很需要帮助。

0 个答案:

没有答案