小编Spu*_*pud的帖子

Moq First()Last()和GetEnumerator()wierdness

我是一个rps =新名单的莫清我的路线部件<IRoutePart>......(3路部件)

和Moqing GetEnumerator()我的路线如下

route.Setup(ro => ro.GetEnumerator()).返回(rps.GetEnumerator());

但是,在调用Last()时,Moq在以下代码中失败并且"Sequence contains no elements"

o.Route.Any(rp => rp.IsNonTowLocation && rp!= o.Route.First()&& rp!= o.Route.Last())

在即时窗口中查看First()Last()如果我多次执行First()Last(),我会发现值会发生变化.就好像MoveNext()被调用而不是Reset()和Enumerable它完全混淆了.有没有人在Moq遇到这个问题并找到了解决方案?

linq moq enumerable

9
推荐指数
1
解决办法
1104
查看次数

如何在BlockingCollection上取消GetConsumingEnumerable()

在下面的代码中,我使用CancellationToken在生产者没有生成时唤醒GetConsumingEnumerable(),我想要脱离foreach并退出Task.但我没有看到IsCancellationRequested被记录,我的Task.Wait(timeOut)等待整个timeOut期间.我究竟做错了什么?

userToken.Task = Task.Factory.StartNew(state =>
{
    userToken.CancelToken = new CancellationTokenSource();

    foreach (var broadcast in userToken.BroadcastQueue.GetConsumingEnumerable(userToken.CancelToken.Token))
    {
        if (userToken.CancelToken.IsCancellationRequested)
        {
            Log.Write("BroadcastQueue IsCancellationRequested");
            break;
            ...
        }
    }

    return 0;
}, "TaskSubscribe", TaskCreationOptions.LongRunning);
Run Code Online (Sandbox Code Playgroud)

后来...

UserToken.CancelToken.Cancel();          
try
{
    task.Wait(timeOut);
}
catch (AggregateException ar)
{
    Log.Write("AggregateException " + ar.InnerException, MsgType.InfoMsg);
}
catch (OperationCanceledException)
{
    Log.Write("BroadcastQueue Cancelled", MsgType.InfoMsg);
}
Run Code Online (Sandbox Code Playgroud)

c# cancellation blockingcollection

8
推荐指数
2
解决办法
7919
查看次数

标签 统计

blockingcollection ×1

c# ×1

cancellation ×1

enumerable ×1

linq ×1

moq ×1