为什么异步Task <TResult>总是返回空值

小锡

我想在for循环中做一些事情,并使用'await Task.Delay()'。但是我总是空着走,应该返回10。

public class Test {
    public async Task<int> test() {
        int sum=0;
        for (int i = 0; i < 10; i++) {
            System.Diagnostics.Debug.Write("start loop");
            sum++;
            await Task.Delay(1000);
            System.Diagnostics.Debug.Write("finish loop");
        }
        return sum;
    }
}

//主要的

Test test = new Test()
var test1 = test.test().Result;
雷内·沃格特(Rene Vogt)

您的问题似乎是等待test().Result导致死锁。原因是这条线

await Task.Delay(1000);

将执行流返回给调用方,然后调用test().Result方等待任务完成。因此,您的主线程正在阻塞。

await在上述行试图恢复的执行testTask.Delay()完成。但是默认情况下,它会尝试在您的调用线程上恢复执行。是的,当前由于等待而被阻塞的线程Result

一种解决方案可能是将行更改为:

await Task.Delay(1000).ConfigureAwait(false);

这导致await不再尝试在原始线程上恢复,而是在其他线程上恢复。这样,您可以避免死锁,并且程序应继续执行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

异步Task <TResult>-返回值

为什么BehaviorSubject总是返回空值?

为什么在Laravel中获取JavaScript总是返回空值?

为什么tensorflow.rank总是返回空值的形状

Firebase task.getResult().getData(); 总是返回空值。(异步问题?)

为什么下面的函数不返回任何值,它总是返回空

为什么MockMvc总是返回空的content()?

使用公共异步任务从 API HTTP Post 返回 json 响应时 TResult 应该是什么

为什么返回Task <int>而不是int?(异步并等待)

为什么异步方法的返回类型不能从Task派生?

GMS Task <TResult>类:如果isSuccessful(),getResult()是否可以返回null?

为什么element.style在JS中总是返回空?

为什么我的mysql查询总是返回空结果?

为什么SQL函数总是返回空结果集?

为什么dataTable.Select总是返回空结果?

为什么异步总是返回承诺?

为什么Glass Mapper返回空值?

为什么 Kotlin 的 mutableListOf() 返回空值

为什么to_json返回空值?

为什么SSIS查找返回空值?

ValueTask <TResult>和异步状态机

C#中Task.FromResult <TResult>的用途是什么

Python:为什么值总是返回0

为什么TokenOrigin总是返回相同的值?

异步并等待:为什么其签名定义了Task的返回类型的异步方法显式地返回Task?

获取总是返回空值

将Task <TResult>中的TResult强制转换为System.Object

检查对象是Task还是Task <TResult>

为什么返回Task.CompletedTask未能在异步方法中编译?