返回任务结果

时间:2016-08-24 22:43:11

标签: c# async-await task

我有一个名为 ChangeMap 的函数,它运行一个路径查找器并返回路径(如果找到)。 通常我不会那么用,但现在我需要检查很多路径,当我运行所有路径时,我的应用程序会冻结片刻。

1路径需要70ms到800ms,因此应用程序不会冻结,我想在任务中执行路径查找器部分并等待返回的路径。

让我说我有这个

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 个答案:

答案 0 :(得分:1)

尝试以下方法:

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

然后在调用代码中:

Path tempPath = await GetPath2(0, 10);