异步和输出参数:一个困境
开发人员经常遇到需要编写带有输出参数的异步方法,但 .NET 框架提出了在这方面是一个挑战。
问题
以下代码片段说明了问题:
public async void Method1() { int op; int result = await GetDataTaskAsync(out op); }
此代码尝试创建带有输出参数的异步方法,但此类功能在 .NET 中不可用框架。
推理
根据卢西安Microsoft 工程师 Wischik 表示,这种限制源于 CLR 中异步方法的实现方式。它们被编译器转换为状态机对象,而状态机对象缺乏存储输出或引用参数地址的安全机制。
解决方法
常见的解决方法就是让异步方法返回一个元组:
public async Task Method1() { var tuple = await GetDataTaskAsync(); int op = tuple.Item1; int result = tuple.Item2; } public async Task<Tuple<int, int>> GetDataTaskAsync() { //... return new Tuple<int, int>(1, 2); }
这种方法提供了一种从异步方法传回多个值的方法,而无需求助于输出参数。
以上是如何在 .NET 中将输出参数与异步方法一起使用?的详细内容。更多信息请关注PHP中文网其他相关文章!