Csharp/C#教程:从Task.Run获取返回值分享


从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调用它,如下所示:

上述就是C#学习教程:从Task.Run获取返回值分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 string blah = WrapSomeMethod(someParam).Result; 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/959689.html

(0)
上一篇 2021年11月24日
下一篇 2021年11月24日

精彩推荐