从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