【问题标题】:Q# Aggregate Exception ErrorQ# 聚合异常错误
【发布时间】:2018-07-30 19:18:57
【问题描述】:

使用 Q# 编码时,使用以下代码 sn-p 我得到一个聚合异常错误(似乎发生了一个或多个错误)。

这个特定的代码 sn-p 有什么问题,Q# 文档的哪些部分与这个问题有关?

代码片段:

            // Try initial values
            Result[] initials = new Result[] { Result.Zero, Result.One };
            foreach (Result initial in initials)
            {
                BellTest.Run(sim, 1000, initial).Wait();
                var res = BellTest.Run(sim, 1000, initial).Result;
                var (numZeros, numOnes, agree) = res;
                System.Console.WriteLine(
                    $"Init:{initial,-4} 0s={numZeros,-4} 1s={numOnes,-4} agree={agree,-4}");
            }

【问题讨论】:

  • 能否请您将此代码和包含BellTest操作定义的Q#代码包含为可以复制粘贴的代码sn-ps?这将使重现错误更容易
  • @MariiaMykhailova 我可以包含 Q# 代码,但我认为没有必要,因为它应该是由于未使用等待或结果关键字导致的错误
  • 你能发一下BellTest.Run代码sn-p吗?

标签: c# q#


【解决方案1】:

每次调用Q# 操作都是异步的,因为在实际硬件上的执行也是异步的,因此每次调用Run 时都必须等待执行完成,然后才能执行另一个量子操作。有多种方法可以等待异步Task 完成,包括使用await 关键字、Wait() 或检索TaskResult

在这种特殊情况下,您调用BellTest.Run 两次,第二次不等待第一次完成。如果您将 Wait() 添加到您的第一个 Run,则 Exeption 将消失,例如:

    BellTest.Run(sim, 1000, initial).Wait();

【讨论】:

  • 他为什么要调用 BellTest.Run 两次,为什么一个在等待而另一个返回结果?
【解决方案2】:

看看你的 innerException 问题是空引用异常。 调试您的代码并确保没有任何内容为空。

BellTest, sim, intinial 或 BellTest.Run(sim,1000,intinial)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    相关资源
    最近更新 更多