Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在异步C#任务中使用产量

如何在异步C#任务中使用产量
EN

Stack Overflow用户
提问于 2018-08-14 22:56:35
回答 2查看 6.4K关注 0票数 5

我试图在异步任务中使用产率并返回将X转换为Y的结果。但是,我在select上得到了一个错误。错误是:

错误CS1942 select子句中表达式的类型不正确。类型推断在调用“选择”时失败。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public async Task<Result<dynamic>> GetYAsync(IEnumerable<X> infos)
    {
        return Task.WhenAll(from info in infos.ToArray() select async ()=>
        {
            yield return await new Y(info.Id, "Start");
        });
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-14 23:14:11

简短的回答:您不能使用异步收益语句。

但在大多数情况下你不需要这么做。使用LINQ,您可以在将所有任务传递到Task.WaitAll之前聚合它们。我将您的示例简化为返回一个IEnumerable<int>,但这将适用于每种类型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Program
{
   public static Task<int> X(int x) 
   {
       return Task.FromResult(x);
   }
    
   public static async Task<IEnumerable<int>> GetYAsync(IEnumerable<int> infos)
   {
       var res = await Task.WhenAll(infos.Select(info => X(info)));
       return res;
   }
    
   public static async void Main()
   {
       var test = await GetYAsync(new [] {1, 2, 3});
       Console.WriteLine(test);
   }
}

您的示例有另一个错误await new Y(...),构造函数不能是异步的,因此我用异步函数替换了它。(正如注释中所暗示的,在技术上可以创建自定义awaitable类型,并使用new创建此类型,尽管很少使用这种类型),

上面的示例使用infos.Select创建一个挂起的任务列表,该列表通过调用X函数返回。然后将等待并返回此任务列表。

这个workaround应该适合大多数情况。实际的异步迭代器(例如在JavaScript中)在.Net中不受支持。

更新:这个特性目前被建议为语言提案:异步流。所以也许我们将来会看到这一点。

更新:如果您需要异步迭代器,目前有几个选项可用:

  1. Reactive,RX.Net,它为您提供基于事件的异步可观察流。
  2. 有异步迭代器或异步枚举AsyncEnumerable.Net异步枚举的实现。
票数 6
EN

Stack Overflow用户

发布于 2018-08-14 23:07:06

你不知道。异步Enum支持(和产量是实现枚举的)提供了C# 8在2019年的某一点上看。所以,就目前而言,答案就是你没有。

您得到错误的原因是您也不能返回结果。收益率(返回)是特定于实现枚举的。您的方法签名不匹配。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51854217

复制
相关文章
在C#中使用 CancellationToken 处理异步任务
在 .NET Core 中使用异步编程已经很普遍了, 你在项目中随处可见 async 和 await,它简化了异步操作,允许开发人员,使用同步的方式编写异步代码,你会发现在大部分的异步方法中,都提供了CancellationToken参数,本文主要介绍下 CancellationTokenSource 和 CancellationToken在异步任务中的使用。
全球技术精选
2021/03/23
2K0
在C#中使用 CancellationToken 处理异步任务
springboot使用异步任务
一个简单的异步任务在springboot中已经为我们封装好,这里我们可以直接在函数上加@Async注解即可使用
阿超
2022/08/16
3910
springboot使用异步任务
spring boot使用@Async异步任务
返回值,若想获取到返回值,应该轮询方法获取,否则若果没有isDone则不会走下面的方法,或者可以使用CompletableFuture:
小森啦啦啦
2019/07/15
6440
spring boot使用@Async异步任务
使用swoole实现异步任务处理
swoole内置的swoole_http_server正好非常适合处理这种业务,示例代码实现如下
luxixing
2019/05/28
8370
C#异步使用要点(翻译)
在使用异步方法中最好不要使用void当做返回值,无返回值也应使用Task作为返回值,因为使用void作为返回值具有以下缺点
莫问今朝
2018/11/05
3.4K0
如何在SpringBoot中异步请求和异步调用
可以先释放容器分配给请求的线程与相关资源,减轻系统负担,释放了容器所分配线程的请求,其响应将被延后,可以在耗时处理完成(例如长时间的运算)时再对客户端进行响应。
架构师修炼
2020/07/20
2K0
如何在SpringBoot中异步请求和异步调用
如何取消 JavaScript 中的异步任务
有时候执行异步任务可能是很困难的,尤其是在特定的编程语言不允许取消被错误启动或不再需要的操作时。幸运的是 JavaScript 提供了非常方便的功能来中止异步活动。在本文中,你可以学到如何创建可中止的函数。
疯狂的技术宅
2020/03/26
3.3K0
如何取消 JavaScript 中的异步任务
如何在SpringBoot中异步请求和异步调用
链接 | cnblogs.com/baixianlong/p/10661591.html
JavaFish
2020/02/19
1.6K0
如何在SpringBoot中异步请求和异步调用
如何在 Vue3 中异步使用 computed 计算属性
众所周知,Vue 中的 computed 计算属性默认必须同步调用,这也就意味着,所有值都必须立即返回,如果试图异步调用,那么 Vue 会立刻报错。
HikariLan贺兰星辰
2022/11/12
10.1K0
Python 异步: 使用和查询任务(8)
异步任务具有生命周期。首先,任务是从协程创建的。然后安排在事件循环中独立执行。在某个时候,它会运行。
数据科学工厂
2023/02/09
9250
如何在Vuex中处理异步操作?
当组件中的fetchData方法被调用时,它会通过this.$store.dispatch触发名为fetchData的action。fetchData action中执行异步操作,例如发起API请求,然后在请求完成后通过mutations更新状态。
王小婷
2023/10/03
2640
在现代 JavaScript 中编写异步任务[每日前端夜话0xDD]
在本文中,我们将探讨过去异步执行的 JavaScript 的演变,以及它是怎样改变我们编写代码的方式的。我们将从最早的 Web 开发开始,一直到现代异步模式。
疯狂的技术宅
2019/11/03
2.4K0
springBoot异步任务、异步监控
除了自己实现线程外,springBoot本身就提供了通过注解的方式,进行异步任务的执行。下面主要记录一下,在springBoot项目中实现异步任务,以及对异步任务进行封装监控。
xcbeyond
2020/04/02
1.2K0
springboot任务之异步任务
此时我们启动服务器,并输出localhost:8080/hello,会在3s之后响应的success。
西西嘛呦
2020/08/26
4440
Python 异步: 使用和查询任务(8)
异步任务具有生命周期。首先,任务是从协程创建的。然后安排在事件循环中独立执行。在某个时候,它会运行。
数据科学工厂
2023/02/27
7800
Python 异步: 使用和查询任务(8)
C# 使用Task执行异步操作
https://www.cnblogs.com/ryanzheng/p/10963966.html
zls365
2020/08/19
2.9K0
C#使用BeginInvoke实现异步编程
BeginInvoke方法是委托(Delegate)类的一个成员,它允许你在一个新的线程中异步执行方法。它通常用于执行长时间运行的操作,以确保主线程保持响应性。
郑子铭
2023/10/23
1K0
C#使用BeginInvoke实现异步编程
SpringBoot异步任务
在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3.x之后,就已经内置了@Async来完美解决这个问题。
别团等shy哥发育
2023/02/25
3600
SpringBoot异步任务
点击加载更多

相似问题

Python异步任务的产量很低

17

异步任务中的C# Xamarin异步任务

13

异步任务c#

12

异步协同产量

11

c#中的异步任务

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文