C#-如果等待时间过长,则帮助跳过



我对task和async很陌生,如果等待时间太长,我会对如何取消var状态的等待感到困惑

public async void GetServersV2(List<string> ls)
{
for (int i = 0; i < ls.Count; i++)
{
IMinecraftPinger pinger = new MinecraftPinger(ls[i], (short)port);

try
{
var statuss = await pinger.PingAsync();
Console.WriteLineFormatted($"Server: " + ls[i] + " is {0} | {3} online is " + statuss.Players.Online + "/" + statuss.Players.Max + " | " + "{4} is: " + statuss.Version.Name, Color.White, status);
}
catch
{
Console.WriteLineFormatted("Server: " + ls[i] + " is {1}", Color.White, status);
}
}
}

一个选项是,运行两个任务,即pingerTask和delayTask,并等待第一个任务获胜:

var pingTask = pinger.PingAsync(); // start the task, but do not await it
var timeoutTask = Task.Delay(TimeSpan.FromSeconds(10)); // create some timeout task
var winnerTask = await Task.WhenAny(pingTask, timeoutTask); // now await until either the timeoutTask or pingTask finishes
if (winnerTask == pingTask) // if the ping is done before the timeout, then...
{
var statuss = await pingTask;
}
else
{
// you run into a timeout
}

最新更新