小编CSh*_*ark的帖子

如何修复具有SynchronizationContext的线程池线程的死锁?

我在使用HttpClient发送http请求时遇到间歇性死锁,有时它们永远不会返回到await SendAsync我的代码中.我能够找出处理内部请求的线程HttpClient/ HttpClientHandler由于某种原因SynchronizationContext它在死锁期间有一个.我想弄清楚如何使用线程最终得到a SynchronizationContext,通常他们没有.我会假设无论什么对象导致SynchronizationContext设置它也会阻塞Thread,这会导致死锁.

我是否能够在TPL ETW事件中看到任何相关内容?

我该如何解决这个问题?



编辑2: 我注意到这些死锁的地方是在ServiceContractwindows服务中的wcf (参见下面的代码)中.该SynchronizationContext所导致的问题实际上是一个是WindowsFormsSynchronizationContext,我以为是一些控制入门创建并造成没有清理正确(或者类似).我意识到几乎可以肯定不应该在Windows服务中发生任何Windows窗体的事情,我并不是说我同意它是如何使用的.但是,我没有使用它编写任何代码,我不能轻易地改变所有的引用.

编辑:这是我遇到问题的wcf服务的一般概念的一个例子.这是一个简化版本,而不是确切的代码:

[ServiceContract]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
internal class SampleWcfService
{
    private readonly HttpMessageInvoker _invoker;

    public SampleWcfService(HttpMessageInvoker invoker)
    {
        _invoker = invoker;
    }

    [WebGet(UriTemplate = "*")]
    [OperationContract(AsyncPattern = true)]
    public async Task<Message> GetAsync()
    {
        var context = WebOperationContext.Current;
        using (var request = CreateNewRequestFromContext(context))
        {
            var response = await …
Run Code Online (Sandbox Code Playgroud)

.net c# synchronizationcontext task-parallel-library async-await

6
推荐指数
1
解决办法
518
查看次数

在 TypeScript 中,当类型是函数的参数时,是否有办法限制 Partial&lt;T&gt; 类型的额外/多余属性?

是否有一种标准方法可以让场景 1 因未指定已知属性而出现编译错误,就像场景 2 中一样?或者有一些解决方法吗?

class Class2 {
  g: number;
}

class Testing {
  static testIt3<T>(val: Partial<T>): void {
  }
}

const test = {
  g: 6,
  a: '6',
};

// Scenario 1
Testing.testIt3<Class2>(test);
// TS does not show any errors for this scenario

// Scenario 2
Testing.testIt3<Class2>({
  g: 6,
  a: '6',
});
// but it does for this scenario:
// Object literal may only specify known properties...
Run Code Online (Sandbox Code Playgroud)

实时代码

typescript typescript-generics typescript3.0

6
推荐指数
1
解决办法
2041
查看次数

应该如何将 Typescript 模块增强正确导入/包含到 Angular 库或应用程序中?

我发现了许多关于如何设置模块增强文件以向 node_module 添加功能的示例,但我对如何将它们包含在打字稿编译中有点困惑。我是否应该像这样导入在顶部main.ts(或public_api.ts库)进行增强的文件:

import './moduleaugmentationfile';
Run Code Online (Sandbox Code Playgroud)

或者是否有其他标准方法可以使此附加功能在整个应用程序中可用。

编辑:
是一个示例应用程序。示例模块增强位于moduleaugmentation.ts. 我在 中添加了一条评论main.ts,解释了我对如何最好地包含模块增强的困惑。

node-modules typescript angular

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