use*_*902 5 c# multithreading asynchronous httpwebrequest async-await
我的Windows应用程序的要求是:
使用HttpWebRequest在一个线程中每3秒获取一次Web请求/响应(总共大约有10个线程用于执行此Web请求/响应.)
每个线程使用一些全局变量.
我想使用System.Timers.Timer和async并等待.但我不知道这是高性能的最佳方式.然后如何测试它们.我是C#的绿色.
Mat*_*son 23
您可以编写RepeatActionEvery()如下方法.
它的参数是:
action - 你想要经常重复的动作.interval- 呼叫之间的延迟间隔action().cancellationToken - 用于取消循环的令牌.这是一个可编辑的控制台应用程序,演示了如何调用它.对于ASP应用程序,您可以从适当的位置调用它.
请注意,您需要一种取消循环的方法,这就是我传递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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22332 次 |
| 最近记录: |