2016-08-24 2 views
0

У меня есть функция под названием ChangeMap, которая запускает указатель и возвращает путь (если найден). Обычно я не использую его так много, но теперь мне нужно проверить множество путей, и когда я запустил все их, мое приложение замерзнет на мгновение.Обратный результат задачи

Требуется от 70 мс до 800 мс для 1 пути, и чтобы приложение не зависало, я хочу сделать часть следящего процесса в задаче и ждать возвращаемого пути.

Скажем, у меня есть этот

public Path GetPath(int from, int to) 
{ 
    // Pathfinder work 
    return new Path(thePath); 
} 

Я попытался это, но он не работает ..

private Path GetPath2(int from, int to) 
{ 
    return Task.Run(() => 
    { 
     return GetPath(from, to); 
    }).Result; 
} 

И если я попробовать это, он дает мне ошибку Не могу дождаться Путь

Path tempPath = await GetPath2(0, 10); 

Кто-нибудь знает, как правильно это сделать? Как подождать возвращаемое значение искателя, а затем продолжить, не замораживая все приложение. Зная, что у меня есть целая куча функций, так что я не могу поставить все вещи в новом потоке:/

+1

'GetPath2' должен быть' private async Задача GetPath2'. Кроме того, существует соглашение для суффикса асинхронных методов с 'Async'. – zerkms

+0

Также стоит прочитать: https://blogs.msdn.microsoft.com/pfxteam/2012/03/24/should-i-expose-asynchronous-wrappers-for-synchronous-methods/ – zerkms

+0

Приложение все еще замирает с этим:/ – Haytam

ответ

1

Попробуйте следующее:

private Task<Path> GetPath2(int from, int to) 
{ 
    return Task.Run(() => 
    { 
     return GetPath(from, to); 
    }); 
} 

Затем в коде вызова:

Path tempPath = await GetPath2(0, 10); 
+0

Спасибо, это не затормозит приложение. – Haytam

Смежные вопросы