因此,我们正在使用 windows azure 设置辅助角色,并且它以非常高的 CPU 利用率运行。我认为这与本节有关,但我不确定该怎么办。每个启动的单独线程都有自己的 sleep ,但主线程只是在 while 循环中运行。那里不应该 sleep 什么的吗?
public class WorkerRole : RoleEntryPoint
{
private List<ProcessBase> backgroundProcesses = new List<ProcessBase>();
public override void Run()
{
// This is a sample worker implementation. Replace with your logic.
Trace.WriteLine("BackgroundProcesses entry point called", "Information");
foreach (ProcessBase process in backgroundProcesses)
{
if (process.Active)
{
Task.Factory.StartNew(process.Run, TaskCreationOptions.LongRunning);
}
}
while (true) { }
}
像这样的事情怎么样,合适吗?
public override void Run()
{
// This is a sample worker implementation. Replace with your logic.
Trace.WriteLine("BackgroundProcesses entry point called", "Information");
List<Task> TaskList = new List<Task>();
foreach (ProcessBase process in backgroundProcesses)
{
if (process.Active)
{
TaskList.Add(Task.Factory.StartNew(process.Run, TaskCreationOptions.LongRunning));
}
}
Task.WaitAll(TaskList.ToArray());
//while (true) { }
}
最佳答案
我觉得你的改变很好。有时我使用Thread.Sleep(Timeout.Infinite)
。
你测试过吗?它会降低CPU使用率吗?可能是任务本身实际上消耗了大量 CPU。我们还不确定 while 循环是罪魁祸首。
关于multithreading - Windows Azure Worker Role,主线程做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12920782/