I have an async operation that takes in an List
of classes available in Train
and get the fare based on the classes asynchronously and returns some data. I am trying to get all those fares within predefined time.
So, here I want to cancel the tasks which are not completed within the predefined time.
public async Task<string> AvailabilityEnquiry(AvailabilityEnquiry LobjAvailabilityEnquiryRequest)
{
List<Task<string>> taskList = new List<Task<string>>();
foreach (var journey in ClassesToGetFares)
{
taskList.Add(Task.Run(() => IRCTC_GetFare()));
}
await Task.WhenAny(Task.WhenAll(taskList), Task.Delay(TimeSpan.FromSeconds(Convert.ToDouble(ConfigurationManager.AppSettings["TimeOutInSeconds"]))));
var completedResults = taskList
.Where(t => t.Status == TaskStatus.RanToCompletion)
.Select(t => t.Result)
.ToList();
}
public static async Task<string> IRCTC_GetFare()
{
LstrApiData = await Lobjrestclient.makeRequest_POSTAsync("IRCTC", LstrJsonData);
return "Success";
}