我有很多方法需要一些具有相同模式的日志记录.有些方法需要返回一些值,有些则不需要.我已经创建了一个带有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以避免任何这些方法,或者可能有另一种方法来实现相同的结果?
我一直在使用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执行类似于动态方法的操作,这样我只能定义附加到类型的方法体?如果没有,编译许多动态程序集有什么大的缺点(比如太多无法加载等等)
我有一个我无法修改的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)
我创建了一个非常简单的webtest,它只有一个简单的URL请求:https://www.domain.com/.
当我运行测试但是我失败了并且这条消息:
请求失败:URI无效:无法确定URI的格式.
但是响应选项卡具有HTTP/1.1 200 OK大量HTML 的正确响应.这是Visual Studio中的一个错误或者某种东西,有没有办法确保它不会将正确的请求视为失败?
PS我也注意到请求需要10到15秒,即使RequestTime(视觉工作室显示)真的小于1.
在控制台中的webpack开发服务器的热更新期间,我看到以下消息:
[HMR] Updated modules:
[HMR] - 1009
[HMR] - 1007
Run Code Online (Sandbox Code Playgroud)
我宁愿在那里看到路径名称,我记得有一个插件,但在谷歌找不到它.
我可以在 .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)
这会导致消息没有属性。有没有更好的方法来做到这一点或者我做错了什么?
此处的文档指出,删除 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 个副本的部署,然后同时删除这两个副本,情况也是如此 - 它们也会被删除(不是一一删除)。
我在这里误解了什么吗?
我遇到了一个重载方法的问题,这些方法具有看似独占的不同约束.这是我的例子:
public class A
{
public void Do<T>() where T : class
{
}
public void Do<T>() where T : struct
{
}
}
Run Code Online (Sandbox Code Playgroud)
并且这不会编译时出现以下错误"已定义相同签名的成员".是否有可能同时满足这两个条件,或者仅仅是C#编译器的限制?
我想让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?
我有这个代码:
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 这个例子是简化的,我确实有多个任务像这样运行。所以我正在寻找一个适用于任意数量任务的通用解决方案