2016-04-27 2 views
0

Это C# CodeКак Multiple C# Задача Factory

app.UseCors(CorsOptions.AllowAll); 
var hubConfiguration = new HubConfiguration(); 
hubConfiguration.EnableDetailedErrors = true; 
app.MapSignalR(hubConfiguration); 

CpuEngine cpuEngine = new CpuEngine(1500); 
MemoryEngine memoryEngine = new MemoryEngine(1500); 
// Task.Factory.StartNew(async() => await cpuEngine.StartCpuCheck()); 
// Task.Factory.StartNew(async() => await memoryEngine.StartCheckMemory()); 

Только первый один работает. Как я могу запускать друг друга?

+0

что произойдет, если вы удалите слова асинхр и ждут от обеих этих линий - оба должны быть запущены – BugFinder

+1

Что вы пытаетесь сделать? В настоящее время вы запускаете оба, а затем ничего не делаете с результатами. –

+0

Возможно ли, что ваша программа заканчивается сразу после этого кода? Пожалуйста, предоставьте остальную часть кода. –

ответ

0

1) Используйте вместо этого Task.Run. 2) Удалите ключевые слова async и await в лямбда. 3) Используйте Task.WhenAll и перейдите в две задачи.

public async Task InvokeAsync() 
{ 
    var cpuEngine = new CpuEngine(1500); 
    var memoryEngine = new MemoryEngine(1500); 

    await Task.WhenAll(
     Task.Run(() => cpuEngine.StartCpuCheck()), 
     Task.Run(() => memoryEngine.StartCheckMemory()));   
} 
+0

Помните, что 'Task.Run()' может быть «опасным» в некоторых сценариях, когда контекст синхронизации допускает только однопоточные исполнения (например, контекст запроса asp.net). Это может привести к ошибкам во время выполнения или даже к поврежденным данным, если их не использовать тщательно. –