从Task.Run获取返回值

我在这里有以下代码

public static async Task Start(IProgress progress) { const int total = 10; for (var i = 0; i  RunLongTask(i.ToString(CultureInfo.InvariantCulture))); if (progress != null) { var args = new ProcessTaskAsyncExProgress { ProgressPercentage = (int)(i / (double)total * 100.0), Text = "processing " + i }; progress.Report(args); } } return "Done"; } private static string RunLongTask(string taskName) { Task.Delay(300); return taskName + "Completed!"; } 

在这一行:

 await Task.Run(() => RunLongTask(i.ToString(CultureInfo.InvariantCulture))); 

如何获取RunLongTask的字符串值?

我试过了

 var val = await Task.Run(() => RunLongTask(i.ToString(CultureInfo.InvariantCulture))).Result; 

但我得到一个错误“字符串是不可等的”

从结尾删除Result 。 当您await您将从await-able方法返回Result

 var val = await Task.Run(() => RunLongTask(i.ToString(CultureInfo.InvariantCulture))); 

这不是旧问题的直接答案,而是对于其他搜索:

“通常”您不应该这样做,但有时您需要匹配库API,以便您可以使用如下的包装函数:

 private async Task WrapSomeMethod(string someParam) { //adding .ConfigureAwait(false) may NOT be what you want but google it. return await Task.Run(() => SomeObj.SomeMethodAsync(someParam)).ConfigureAwait(false); } 

然后使用.Result调用它,如下所示:

 string blah = WrapSomeMethod(someParam).Result;