সম্পাদনা: এই প্রশ্নটি দেখে মনে হচ্ছে এটি একই সমস্যা হতে পারে তবে এর কোনও প্রতিক্রিয়া নেই ...
সম্পাদনা: পরীক্ষার ক্ষেত্রে 5 টি কার্যটি আটকে আছে বলে মনে হচ্ছে WaitingForActivation
।
নেট .৪.৫-এ সিস্টেম. নেট.হট্ট.এইচটিপি.এইচটিপি ক্লায়েন্ট ব্যবহার করে আমি কিছু অদ্ভুত আচরণের মুখোমুখি হয়েছি - যেখানে "অপেক্ষা করা" কল করার ফলাফলের (উদাহরণস্বরূপ) httpClient.GetAsync(...)
কখনই ফিরে আসবে না।
এটি কেবলমাত্র কিছু পরিস্থিতিতে দেখা যায় যখন নতুন অ্যাসিঙ্ক / প্রত্যাশিত ভাষা কার্যকারিতা এবং টাস্ক এপিআই ব্যবহার করে - কেবল ধারাবাহিকতা ব্যবহার করার সময় কোডটি সর্বদা কাজ করে বলে মনে হয়।
সমস্যাটি পুনরুত্পাদন করার জন্য এখানে কিছু কোড রয়েছে - নীচের জিইটি শেষ পয়েন্টগুলি প্রকাশ করার জন্য ভিজ্যুয়াল স্টুডিও 11-এ এটি একটি নতুন "এমভিসি 4 ওয়েবএপি প্রকল্প" এ ফেলে দিন:
/api/test1
/api/test2
/api/test3
/api/test4
/api/test5 <--- never completes
/api/test6
এখানের শেষ পয়েন্টগুলির প্রতিটি একই ডেটা (স্ট্যাকওভারফ্লো ডটকম থেকে প্রতিক্রিয়া শিরোনাম) প্রদান করে /api/test5
যা ব্যতীত কখনই সম্পূর্ণ হয় না।
আমি কি এইচটিপিপ্লিনেন্ট ক্লাসে একটি বাগের মুখোমুখি হয়েছি, বা আমি কোনওভাবে এপিআইর অপব্যবহার করছি?
পুনরুত্পাদন করার কোড:
public class BaseApiController : ApiController
{
/// <summary>
/// Retrieves data using continuations
/// </summary>
protected Task<string> Continuations_GetSomeDataAsync()
{
var httpClient = new HttpClient();
var t = httpClient.GetAsync("http://stackoverflow.com", HttpCompletionOption.ResponseHeadersRead);
return t.ContinueWith(t1 => t1.Result.Content.Headers.ToString());
}
/// <summary>
/// Retrieves data using async/await
/// </summary>
protected async Task<string> AsyncAwait_GetSomeDataAsync()
{
var httpClient = new HttpClient();
var result = await httpClient.GetAsync("http://stackoverflow.com", HttpCompletionOption.ResponseHeadersRead);
return result.Content.Headers.ToString();
}
}
public class Test1Controller : BaseApiController
{
/// <summary>
/// Handles task using Async/Await
/// </summary>
public async Task<string> Get()
{
var data = await Continuations_GetSomeDataAsync();
return data;
}
}
public class Test2Controller : BaseApiController
{
/// <summary>
/// Handles task by blocking the thread until the task completes
/// </summary>
public string Get()
{
var task = Continuations_GetSomeDataAsync();
var data = task.GetAwaiter().GetResult();
return data;
}
}
public class Test3Controller : BaseApiController
{
/// <summary>
/// Passes the task back to the controller host
/// </summary>
public Task<string> Get()
{
return Continuations_GetSomeDataAsync();
}
}
public class Test4Controller : BaseApiController
{
/// <summary>
/// Handles task using Async/Await
/// </summary>
public async Task<string> Get()
{
var data = await AsyncAwait_GetSomeDataAsync();
return data;
}
}
public class Test5Controller : BaseApiController
{
/// <summary>
/// Handles task by blocking the thread until the task completes
/// </summary>
public string Get()
{
var task = AsyncAwait_GetSomeDataAsync();
var data = task.GetAwaiter().GetResult();
return data;
}
}
public class Test6Controller : BaseApiController
{
/// <summary>
/// Passes the task back to the controller host
/// </summary>
public Task<string> Get()
{
return AsyncAwait_GetSomeDataAsync();
}
}
HttpClient.GetAsync(...)
?