小编Eli*_*bel的帖子

差别包装

升级应用程序时,该Test-ServiceFabricApplicationPackage命令会为版本号未更改的每个代码包抛出错误(它表示内容已更改,即使代码尚未更改).我知道有一个功能允许创建部分包,但我无法使用它.我的问题是:

  1. 如何检查代码包的内容是否有变化?二元比较?
  2. 如何构建部分包(在VS构建包后删除代码目录?编辑ServiceManifest.xml文件?)
  3. 如何运行Test-ServiceFabricApplicationPackage(图像存储URL是什么?如何将该参数传递给标准部署脚本?)

我很欣赏一个彻底的例子.

azure-service-fabric

11
推荐指数
2
解决办法
4333
查看次数

任务不是垃圾收集

在下面的程序中,我希望任务能够获得GC,但事实并非如此.我已经使用了一个内存分析器,它表明CancellationTokenSource即使任务明显处于最终状态,它也会引用它.如果我删除TaskContinuationOptions.OnlyOnRanToCompletion,一切都按预期工作.

为什么会发生这种情况,我该怎么做才能阻止它呢?

    static void Main()
    {
        var cts = new CancellationTokenSource();

        var weakTask = Start(cts);

        GC.Collect();
        GC.WaitForPendingFinalizers();
        GC.Collect();

        Console.WriteLine(weakTask.IsAlive); // prints True

        GC.KeepAlive(cts);
    }

    private static WeakReference Start(CancellationTokenSource cts)
    {
        var task = Task.Factory.StartNew(() => { throw new Exception(); });
        var cont = task.ContinueWith(t => { }, cts.Token, TaskContinuationOptions.OnlyOnRanToCompletion, TaskScheduler.Default);
        ((IAsyncResult)cont).AsyncWaitHandle.WaitOne(); // prevents inlining of Task.Wait()
        Console.WriteLine(task.Status); // Faulted
        Console.WriteLine(cont.Status); // Canceled
        return new WeakReference(task);
    }
Run Code Online (Sandbox Code Playgroud)

我怀疑是因为延续从不运行(它不符合其选项中指定的标准),所以它永远不会从取消令牌中取消注册.因此CTS持有对延续的引用,该引用持有对第一个任务的引用.

更新

PFX团队已确认这似乎是泄漏.作为解决方法,我们在使用取消令牌时已停止使用任何延续条件.相反,我们总是执行延续,检查内部条件,OperationCanceledException如果不满足则抛出.这保留了延续的语义.以下扩展方法封装了这个:

public static Task ContinueWith(this Task …
Run Code Online (Sandbox Code Playgroud)

c# task-parallel-library .net-4.5

10
推荐指数
1
解决办法
1509
查看次数

过度配置集群的规模集

似乎如果您将 Scale Set 的overprovision属性设置为true( https://azure.microsoft.com/en-us/documentation/articles/virtual-machine-scale-sets-design-overview/#overprovisioning ),您会得到一个无效的 SF集群(删除的不必要的虚拟机在集群中显示为坏节点)。

有没有办法让它工作?当您有多个 VM 扩展时,过度配置可以真正帮助部署成功。

azure-virtual-machine azure-service-fabric azure-vm-scale-set

5
推荐指数
1
解决办法
1677
查看次数

如何使用谓词实现Task.WhenAny()

我想异步执行几个任务,每个任务都会运行http请求,可以抛出异常或安全结束.我需要在第一个任务成功完成或所有任务都失败时完成.请指教.

c# task-parallel-library

5
推荐指数
2
解决办法
1070
查看次数