2016-08-24 12 views
0

私はという名前のファンクションを持っています。パスマップを実行し、見つかった場合はパスを返すChangeMapです。 私はそれをあまり使用しませんが、今は多くのパスをチェックする必要があります。すべてを実行すると、しばらくアプリケーションがフリーズします。タスクの結果を返します

1つのパスで70msから800msの時間がかかり、アプリケーションがフリーズしないように、タスクでパスファインダーの部分を行い、返されたパスを待っています。

は、私がこれを試みたが、それは動作しません。..

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

そして、私はこれをしようとした場合、それは私にがパスを待つことができないエラーを与えるのは、私はこの

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

を持っているとしましょう

Path tempPath = await GetPath2(0, 10); 

誰でもこれを正しく行う方法を知っていますか? パスファインダーの戻り値を待ってから、アプリケーション全体をフリーズせずに続行する方法。私は新しいスレッド内のすべてのものを置くことができないので、私は機能の全体の束を持っていることを知っ:/

+1

'GetPath2'は' private非同期タスク 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

関連する問題