小编Ily*_*dik的帖子

在一个参数中组合Action和Func

我有很多方法需要一些具有相同模式的日志记录.有些方法需要返回一些值,有些则不需要.我已经创建了一个带有Action参数的方法,以避免对所有逻辑进行复制.它看起来像这样:

private void Execute(Action action)
{
   Logger.Start();
   try
   {
      action();
   }
   catch(Exception exception)
   {
      Logger.WriteException();
      throw;
   }
   finally
   {
       Logger.Finish();
   }
}
Run Code Online (Sandbox Code Playgroud)

现在我有一些类似的电话

public void DoSomething(string parameter)
{
    Execute(() => GetProvider(parameter).DoSomething());
}
Run Code Online (Sandbox Code Playgroud)

但我需要一些返回值的函数.最好的方法是什么?我现在找到了两个:

1)使用Func创建Execute方法的副本

private T Execute<T>(Func<T> action)
{
   Logger.Start();
   try
   {
      return action();
   }
   catch(Exception exception)
   {
      Logger.WriteException();
      throw;
   }
   finally
   {
       Logger.Finish();
   }
}
Run Code Online (Sandbox Code Playgroud)

此方法有效,但也有一些复制粘贴.

2)将参数欺骗为动作:

public Result DoSomething(string parameter)
{
    Result result = null;
    Execute(() => result = GetProvider(parameter).DoSomething());
    return result;
}
Run Code Online (Sandbox Code Playgroud)

这不需要复制粘贴,但看起来不太好.

有没有办法以某种方式加入Action和Func以避免任何这些方法,或者可能有另一种方法来实现相同的结果?

.net c# delegates action func

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

可以使用Roslyn生成类似于DynamicMethod IL生成的动态方法

我一直在使用DynamiMethod来生成IL

method.GetILGenerator();
Run Code Online (Sandbox Code Playgroud)

这很好用,但当然很难使用,因为你通常不想在C#这样的高级语言中使用低级别的IL.现在,因为有罗斯林,我可以使用它.我试图找出如何使用Roslyn做类似的事情:生成一个动态方法,然后为它创建一个委托.我能做到的唯一方法是拥有这样的全班

SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText(@"
using System;

namespace RoslynCompileSample
{
    public class Writer
    {
        public void Write(string message)
        {
            Console.WriteLine(message);
        }
    }
}");
Run Code Online (Sandbox Code Playgroud)

然后我可以使用字符串连接插入我的方法而不是Write方法.之后,在内存中生成动态程序集并加载,并使用反射来获取所需方法并生成委托.

这种方法似乎工作正常,但对我的情况似乎有点过分,因为我需要使用多种独立的方法,这可能会导致大量的程序集被加载.

所以问题是:是否有一种简单的方法可以为Roslyn执行类似于动态方法的操作,这样我只能定义附加到类型的方法体?如果没有,编译许多动态程序集有什么大的缺点(比如太多无法加载等等)

.net c# compilation reflection.emit roslyn

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

如何从flex计算中排除div(flex项)?

我有一个我无法修改的html布局,因为它是一个3d派对库.

我有四个div,我希望它们在这样的Flexbox中:

1 ------ ------ 2 3

(其中2位于中心,4位不可见).

我在这里创建了一个例子.

它似乎主要是因为我想要除了最后一个div弄乱项目编号2的中心位置这一事实.有没有办法我可以通过css完全"排除"它从flex数组中,即使它是在HTML?

.fc-toolbar {
	background-color: #7CC2DD;
	color: white;
	height: 5rem;
	display: flex;
	align-items: center;
	justify-content: space-between;
}

.fc-left {
	order: 0;	
}

.fc-right {
	order: 2;
}

.fc-center {
	order: 1;
}

.fc-clear {

}
Run Code Online (Sandbox Code Playgroud)
<div class="fc-toolbar">
  <div class="fc-left">
    <button type="button">
      <
    </button></div>
  <div class="fc-right">
    <button type="button">
          >
    </button>
  </div>

  <div class="fc-center">
    <h2>May 2016</h2>
  </div>
  <div class="fc-clear"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

css flexbox

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

Web测试运行期间的URI错误无效

我创建了一个非常简单的webtest,它只有一个简单的URL请求:https://www.domain.com/.

当我运行测试但是我失败了并且这条消息:

请求失败:URI无效:无法确定URI的格式.

但是响应选项卡具有HTTP/1.1 200 OK大量HTML 的正确响应.这是Visual Studio中的一个错误或者某种东西,有没有办法确保它不会将正确的请求视为失败?

PS我也注意到请求需要10到15秒,即使RequestTime(视觉工作室显示)真的小于1.

load-testing visual-studio-2015

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

用于模块友好名称的Webpack插件(路径而不是数字)

在控制台中的webpack开发服务器的热更新期间,我看到以下消息:

[HMR] Updated modules: 
[HMR]  - 1009 
[HMR]  - 1007
Run Code Online (Sandbox Code Playgroud)

我宁愿在那里看到路径名称,我记得有一个插件,但在谷歌找不到它.

webpack webpack-plugin

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

如何将参数添加到 .Net Core 结构化日志记录而不在消息中引用它?

我可以在 .net core 中做到这一点

_logger.LogInformation("Token validated {clientId}", "MyId");
Run Code Online (Sandbox Code Playgroud)

然后像这样的日志库NLog就会知道有一个使用消息中的clientId值调用的属性,并且可以以特殊的方式呈现它。MyId

我试图做同样的事情,而不将属性包含在消息本身中,但无法成功解决它。这是我到目前为止所做的,它不会导致以下属性NLog

 LogEventInfo info = new LogEventInfo
 {
    Properties = {{"clientId", "MyId"}},
 };
 _logger.Log(Microsoft.Extensions.Logging.LogLevel.Information, "Token validated", info, null, info.MessageFormatter);
Run Code Online (Sandbox Code Playgroud)

这会导致消息没有属性。有没有更好的方法来做到这一点或者我做错了什么?

c# logging nlog .net-core structured-logging

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

PodDisruptionBudget 删除 pod 时没有效果

此处的文档指出,删除 Pod 是一种自愿中断,PodDisruptionBudget应予以防范。

我创建了一个简单的测试:

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: test
spec:
  minAvailable: 1
  selector:
    matchLabels:
      app: test

---

apiVersion: v1
kind: Pod
metadata:
  name: test
  labels:
    app: test
spec:
  containers:
    - name: test
      image: myimage
Run Code Online (Sandbox Code Playgroud)

现在,如果我运行apply然后delete pod test,删除这个 Pod 就没有问题了。

如果我现在运行cordon node,那么它会被卡住,因为它无法驱逐最后一个 Pod(这是正确的)。但删除 pod 时似乎并不存在同样的行为。

如果我创建一个至少有 2 个副本的部署,然后同时删除这两个副本,情况也是如此 - 它们也会被删除(不是一一删除)。

我在这里误解了什么吗?

kubernetes

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

具有相同签名的成员已使用不同的类型约束定义

我遇到了一个重载方法的问题,这些方法具有看似独占的不同约束.这是我的例子:

public class A
{
    public void Do<T>() where T : class
    {

    }

    public void Do<T>() where T : struct 
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

并且这不会编译时出现以下错误"已定义相同签名的成员".是否有可能同时满足这两个条件,或者仅仅是C#编译器的限制?

.net c# generics generic-constraints

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

依赖关系 - 未安装错误(npm WARN可选SKIPPING OPTIONAL DEPENDENCY:fsevents@^1.0.0(node_modules\chokidar \node_modules\fsevents)

我想让webpack在Visual Studio中工作,但不断遇到Dependencies - not installed问题.我在输出中收到此错误:

npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_modules\chokidar\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.0.15: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
Run Code Online (Sandbox Code Playgroud)

我在这里读过这篇文章和Scott Hanselman的解决方案.即我已经安装了最新的节点(7.0.0)+ npm(3.10.8)并将Visual Studio设置为使用我的节点安装(因为我在输出中看到了这个,所以这是定义使用的)."C:\Program Files\nodejs\npm.CMD" install

所以我遵循了一切,但问题是:我仍然not installed在Visual Studio中得到这个愚蠢的警告.我做错了什么或它是在其中一个版本中工作,但不再使用最新节点和nmp?

visual-studio node.js npm

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

如何观察由于 C# 中另一个等待任务失败而未等待的任务?

我有这个代码:

var task1 = operation1();
var task2 = operation2();


var result1 = await task1;
var result2 = await task2;
Run Code Online (Sandbox Code Playgroud)

我也处理UnobservedTaskException(通过记录它)。我面临的问题是,在 task1 失败并首先等待导致异常后,task2 以错误形式完成,然后我有一个我不想看到的日志条目,因为我已经记录了第一个异常,然后所有后续我对例外不感兴趣。

所以我想知道是否有办法做一些事情,以便在我得到异常后以某种方式“忽略”所有任务。

我知道我可以使用await Task.WhenAll,但缺点是我必须等待所有异常发生,尽管我确信在第一个任务导致异常之后,我不需要等待其他任务作为整体完成操作已经失败。

另一种可能的解决方案是编写 try/catch 并取消所有任务,但这有点麻烦。

PS 这个例子是简化的,我确实有多个任务像这样运行。所以我正在寻找一个适用于任意数量任务的通用解决方案

.net c# task task-parallel-library

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