原谅标题,我不太确定如何表达我在寻找什么,或者我什至知道我在寻找什么。
我有一个正在运行的服务,它可能同时接受大量请求。此外,在服务中,我必须向外部服务发出一定数量(通常为 10-15 个)的请求,这些请求是并行运行的。此代码如下所示
Task<IResponse>[] tasks = new Task<IResponse>[Adapters.Count];
for(int i = 0; i < Adapters.Count;i++)
{
IAdapter adapter = Adapters[i];
Func<IResponse> makeExternalHttpRequest= () => adapter.MakeExternalHttpRequest(element, mappings);
tasks[i] = Task.Factory.StartNew<IResponse>(() =>
{
try
{
var result = makeExternalHttpRequest();
if (!token.IsCancellationRequested)
{
return result;
}
}catch(Exception exception)
{
}
return null;
}, token);
};
var timeout = ...some timeout value
Task.WaitAll(tasks,timeout, token);
tokenSource.Cancel();
for (int i = 0; i < tasks.Length; i++)
{
if (tasks[i].Result != null)
{
if (tasks[i].IsCompleted)
{
results.Add(tasks[i].Result);
}
}
}
在过去的 6-7 个月里,一切似乎都按我的预期工作,然后昨天,服务器出现故障,我们的系统管理员向我发送了以下信息。
如果您注意到突出显示的区域,则表示经过的时间相当大。
我猜这导致了服务器宕机的原因,但我们仍在调查发生了什么。
关于发生了什么以及我的下一步应该是什么的任何想法?