c# – 命名为异步lambda函数

c# – 命名为异步lambda函数,第1张

概述我想在一个函数中创建一个名为lambda的函数,这样我就可以在同一个函数中重复调用它. 我过去常常同步/没有任务 Func<string, bool> pingable = (url) => return pingtest(url); 但在这种情况下,我想将pingable函数作为一个任务调用,所以我需要一个Task返回类型. 这是我被困的地方. 对于以下所有,我收到编译错误: * Func<st 我想在一个函数中创建一个名为lambda的函数,这样我就可以在同一个函数中重复调用它.

我过去常常同步/没有任务

Func<string,bool> Pingable = (url) => return Pingtest(url);

但在这种情况下,我想将Pingable函数作为一个任务调用,所以我需要一个Task返回类型.

这是我被困的地方.

对于以下所有,我收到编译错误:

* Func<string,Task<bool>> Pingable = (input) => { return Pingtest(url); };   * Task<bool> Pingable = new Task<bool>((input) => { return Pingtest(url); });

我可以正常声明函数,但是我不能把它称为任务:

Func<string,bool> Pingable = (input) => { return Pingtest(url); };         var tasks = new List<Task>();   * tasks.Add(async new Task(Ping("Google.de")));

我用*标记的所有行都会产生copmile错误.

http://dotnetcodr.com/2014/01/17/getting-a-return-value-from-a-task-with-c/似乎有一个解决方案的提示,但那里的示例不允许没有提供输入参数. (从那里取样并简化:)

Task<int> task = new Task<int>(obj => {    return obj + 1;},300);

如何在C#中创建和调用命名的任务lambdas,我想在函数而不是类级别声明它们.

我想要命名的lambda以便多次调用它(在这种情况下是几个url).

您询问代码后编辑/更新:

Func<string,Task<bool>> Ping = url => Task.Run(() =>{    try    {        Ping Pinger = new Ping();        PingReply reply = Pinger.Send(url);        return reply.Status == IPStatus.Success;    }    catch (Exception)    {        return false;    }});var tasks = new List<Task>();tasks.Add(Ping("andreas-reiff.de"));tasks.Add(Ping("Google.de"));Task.WaitAll(tasks.ToArray());bool online = tasks.Select(task => ((Task<bool>)task).Result).Contains(true);

这已经使用了这里提出的解决方案.

解决方法 由于Pingtest本身看起来是同步的,我假设您需要一个Task,以便该方法可以在不同的线程上运行.如果这是真的,你需要使用Task.Run将工作卸载到ThreadPool线程:
Func<string,Task<bool>> func = url => Task.Run(() => Pingtest(url));

为了完整性,如果Pingtest是异步的(即PingtestAsync),则需要创建一个异步lambda表达式:

Func<string,Task<bool>> func = async url => await PingtestAsync(url);

但是,因为在这种情况下PingtestAsync已经返回任务< bool>在添加另一层async或lambda表达式时没有任何意义.这就足够了:

Func<string,Task<bool>> func = PingtestAsync;
总结

以上是内存溢出为你收集整理的c# – 命名为异步lambda函数全部内容,希望文章能够帮你解决c# – 命名为异步lambda函数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1252103.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存