如何使用异步和等待定时器
本文关键字:等待 定时器 异步 何使用 | 更新日期: 2023-09-27 17:50:30
我的windows应用程序的要求是:
-
使用HttpWebRequest在一个线程中每3秒获取web请求/响应。(总共大约有10个线程来做这个web请求/响应)
-
每个线程使用一些全局变量
我想使用System.Timers.Timer和async和await。但我不知道这是提高绩效的最佳方式。以及如何测试它们。我是c#新手
您可以按照如下方式编写RepeatActionEvery()
方法:
它的参数是:
-
action
-您希望每隔一段时间重复一次的动作。 -
interval
-呼叫action()
的延时时间。 -
cancellationToken
-用于取消循环的令牌。
请注意,您需要一种方法来取消循环,这就是为什么我将CancellationToken
传递给RepeatActionEvery()
。在这个示例中,我使用了一个8秒后自动取消的取消源。您可能需要在适当的时候提供一个其他代码称为.Cancel()
的取消源。
using System;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApp1
{
sealed class Program
{
void run()
{
CancellationTokenSource cancellation = new CancellationTokenSource(
TimeSpan.FromSeconds(8));
Console.WriteLine("Starting action loop.");
RepeatActionEvery(() => Console.WriteLine("Action"),
TimeSpan.FromSeconds(1), cancellation.Token).Wait();
Console.WriteLine("Finished action loop.");
}
public static async Task RepeatActionEvery(Action action,
TimeSpan interval, CancellationToken cancellationToken)
{
while (true)
{
action();
Task task = Task.Delay(interval, cancellationToken);
try
{
await task;
}
catch (TaskCanceledException)
{
return;
}
}
}
static void Main(string[] args)
{
new Program().run();
}
}
}