在异步方法中验证参数在同步版本中,我通过简单地检查if(argument==null)thrownewArgumentNullException("argument");来验证参数。在异步方法中应该如何进行相同的检查?1)与同步方法2)(在第一个答案后更新)if(argument==null)returnnewTask.Factory.StartNew(()=>{thrownewArgumentNullException("argument");});这取决于您想何时引发错误-急切地或作为等待的一部分。与迭代器块一样,如果您需要急切的错误检查,则需要两种方法,例如:返回SomeMethodImpl(...args...);}privateasyncTaskSomeMethodImpl(...args...){...awaitetc...}这将执行任何参数检查作为初始调用的一部分,而不是等待。如果你想让异常成为await的一部分,你可以抛出它:...awaitetc...}但是,在您的示例中,您返回Task的事实表明这实际上不是异步方法,而是异步(但不是异步)方法。你不能只做:returnnewTask(()=>{thrownewArgumentNullException("argument");});因为那个Task永远不会开始-而且永远不会。我怀疑你需要做类似的事情:try{thrownewInvalidArgumentException(...);//需要抛出以获取堆栈跟踪}catch(Exceptionex){varsource=newTaskCompletionSource();来源.SetException(前);返回源。任务;这是……有点啰嗦,可以更好地封装。这将返回一个Task,表明它处于Faulted状态。就像在sync方法中一样简单地抛出它,TPL有各种机制来重新抛出异常,例如当你读取时。结果属性或访问权限。异常属性。以上就是C#学习教程:验证异步方法中的参数共享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
