Task当它完成时我正在重新运行.下面是我在Application_Start我的应用程序中调用的函数.
private void Run()
{
Task t = new Task(() => new XyzServices().ProcessXyz());
t.Start();
t.ContinueWith((x) =>
{
Thread.Sleep(ConfigReader.CronReRunTimeInSeconds);
Run();
});
}
Run Code Online (Sandbox Code Playgroud)
我想运行多个任务,编号将从web.config app setttings中读取.
我正在尝试这样的事情,
private void Run()
{
List<Task> tasks = new List<Task>();
for (int i = 0; i < ConfigReader.ThreadCount - 1; i++)
{
tasks.Add(Task.Run(() => new XyzServices().ProcessXyz()));
}
Task.WhenAll(tasks);
Run();
}
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?
Mar*_*sen 13
我相信你在寻找:
Task.WaitAll(tasks.ToArray());
Run Code Online (Sandbox Code Playgroud)
https://msdn.microsoft.com/en-us/library/dd270695(v=vs.110).aspx
如果你想一个接一个地运行任务,
await Task.Run(() => new XyzServices().ProcessXyz());
await Task.Delay(ConfigReader.CronReRunTimeInSeconds * 1000);
Run Code Online (Sandbox Code Playgroud)
如果你想同时运行它们,就像任务调度程序允许的那样,
await Task.WhenAll(new[]
{
Task.Run(() => new XyzServices().ProcessXyz()),
Task.Run(() => new XyzServices().ProcessXyz())
});
Run Code Online (Sandbox Code Playgroud)
所以,你的方法应该是这样的,
private async Task Run()
{
var tasks =
Enumerable.Range(0, ConfigReader.ThreadCount)
.Select(i => Task.Run(() => new XyzServices().ProcessXyz()));
await Task.WhenAll(tasks);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12240 次 |
| 最近记录: |