c# – 异步一直下来?

栏目: ASP.NET · 发布时间: 6年前

内容简介:两个版本的工作效果都是一样的,唯一的区别是,当你在这里等待时,你会得到一些性能损失(因为状态机必须被设置,并且可能会使用延续).所以归结于一个权衡:你希望你的方法有一些更有效率,而不是以较少的可读性为代价?还是愿意牺牲表现才能阅读?通常,我建议你先去可读性,只关注性能,如果分析告诉你是值得的.但在这种情况下,我认为可读性的增加很小,所以我可能不会等待.

尝试了解新的异步/等待模式,我有一个问题,我找不到答案,即如果我应该使用异步来装饰我的方法,如果我打算从其他异步函数调用这些方法,或者只是返回任务在适当情况下?

换句话说,这些A,B或C中哪一个是最好的,为什么?

class A<T>
{
      public async Task<T> foo1() //Should be consumed
      {
          return await foo2();
      }

      public async Task<T> foo2() //Could be consumed
      {
          return await foo3();
      }

      private async Task<T> foo3() //Private
      {
          return await Task.Run(...);
      }
}

class B<T>
{
      public async Task<T> foo1() //Should be consumed
      {
          return await foo2();
      }

      public async Task<T> foo2() //Could be consumed
      {
          return await foo3();
      }

      private Task<T> foo3() //Private
      {
          return Task.Run(...);
      }
}

class C<T>
{
      public async Task<T> foo1() //Should be consumed
      {
          return await foo2();
      }

      public Task<T> foo2() //Could be consumed
      {
          return foo3();
      }

      private Task<T> foo3() //Private
      {
          return Task.Run(...);
      }
}

对于重新排列方法来说似乎是多余的,所以我自然地倾向于C,但是同时使用Task T来感觉有点尴尬.除非您使用await关键字.

两个版本的工作效果都是一样的,唯一的区别是,当你在这里等待时,你会得到一些性能损失(因为状态机必须被设置,并且可能会使用延续).

所以归结于一个权衡:你希望你的方法有一些更有效率,而不是以较少的可读性为代价?还是愿意牺牲表现才能阅读?

通常,我建议你先去可读性,只关注性能,如果分析告诉你是值得的.但在这种情况下,我认为可读性的增加很小,所以我可能不会等待.

还要注意,你的类C仍然不够远:foo1()也不需要等待.

http://stackoverflow.com/questions/12016322/async-all-the-way-down


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法谜题

算法谜题

Anany Levitin、Maria Levitin / 赵勇、徐章宁、高博 / 人民邮电出版社 / 2014-1-1

算法是计算机科学领域最重要的基石之一。算法谜题,就是能够直接或间接地采用算法来加以解决的谜题。求解算法谜题是培养和锻炼算法思维能力一种最有效和最有乐趣的途径。 本书是一本经典算法谜题的合集。本书包括了一些古已有之的谜题,数学和计算机科学有一部分知识就发源于此。本书中还有一些较新的谜题,其中有一部分谜题被用作知名IT企业的面试题。全书可分为4个部分,分别是概览、谜题、提示和答案。概览介绍了算法......一起来看看 《算法谜题》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具