Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 取消令牌在Asp.Net Web Api 4.5中不起作用_C#_Asp.net - Fatal编程技术网

C# 取消令牌在Asp.Net Web Api 4.5中不起作用

C# 取消令牌在Asp.Net Web Api 4.5中不起作用,c#,asp.net,C#,Asp.net,我一直在尝试向我的web api异步控制器添加一个取消令牌,以便检测httpClient何时超时(这样我就可以停止任何挂起的等待调用),在这方面花费了数小时却没有成功。以下是我的桌面应用程序(.Net 4.0)调用web api: public void GetServObjAsync() { try { var client = new HttpClient() { Timeout = TimeSpan.FromMillisecond

我一直在尝试向我的web api异步控制器添加一个取消令牌,以便检测httpClient何时超时(这样我就可以停止任何挂起的等待调用),在这方面花费了数小时却没有成功。以下是我的桌面应用程序(.Net 4.0)调用web api:

public void GetServObjAsync()
{
   try
   {
      var client = new HttpClient()
      {
            Timeout = TimeSpan.FromMilliseconds(10000)
      };
      var myUri = new Uri("http://mysWebApi.net/myController");
      client.GetAsync(myUri ).ContinueWith(t =>
      {
         if (t.IsCompleted)
         {
            t.Result.Content.ReadAsAsync<servObj>().ContinueWith(t2 =>
            {
               if (!t2.IsFaulted)
               {
                  OnSerVObjReady(t2.Result);
               }
             }
          }
       }
    }
    catch
    {
       // Handle and notify
    }
}
public void getServobJSync()
{
尝试
{
var client=新的HttpClient()
{
超时=时间跨度。从毫秒(10000)
};
var myUri=新Uri(“http://mysWebApi.net/myController");
client.GetAsync(myUri).ContinueWith(t=>
{
如果(t.已完成)
{
t、 Result.Content.ReadAsAsync().ContinueWith(t2=>
{
如果(!t2.IsFaulted)
{
OnSerVObjReady(t2.结果);
}
}
}
}
}
抓住
{
//处理并通知
}
}
这是我的web api控制器:

public class ServController : ApiController
{
  public async Task<servObj> Get(CancellationToken Token)
  {
     try
     {
       await Task.Delay(15000);
       var resp = await singleHttpCallAsync(Token);
       if (Token.IsCancellationRequested)
       {
          return null;
       }
       var respObj = await multipleHttpCallsAsync(Token);
       return respObj;
     }
     catch
     {
       return null;
     }
  }

  private Async Task<servObj> multipleHttpCallsAsync(CancellationToken token)
  {
    var respObjs = new List<detailObj>();
    var httpCalls = new Task<detailObj>[2];
    httpCalls[0] = singleHttpCall2Async(0, token);
    httpCalls[1] = singleHttpCall2Async(1, token);
    await Task.WhenAll(httpCalls);
    respObjs.Add(await httpCalls[0]);
    respObjs.Add(await httpCalls[1]);
    return new servObj(respObjs);
  }
}
公共类ServController:ApicController
{
公共异步任务获取(CancellationToken令牌)
{
尝试
{
等待任务。延迟(15000);
var resp=await singleHttpCallAsync(令牌);
if(令牌.IsCancellationRequested)
{
返回null;
}
var respObj=等待多重HttpCallsAsync(令牌);
返回respObj;
}
抓住
{
返回null;
}
}
专用异步任务multipleHttpCallsAsync(CancellationToken令牌)
{
var respObjs=新列表();
var httpCalls=新任务[2];
httpCalls[0]=singleHttpCall2Async(0,令牌);
httpCalls[1]=singleHttpCall2Async(1,令牌);
等待任务WhenAll(httpCalls);
respObjs.Add(等待httpCalls[0]);
respObjs.Add(等待httpCalls[1]);
返回新的servObj(respObjs);
}
}
我曾尝试过在中所述的方法,其他许多方法都有不同的超时,但最后,请求完成并返回servObj(respObjs)。如果您能提供帮助,说明为什么httpClient.timeout没有反映在我的控制器中,我将不胜感激