我有一个在它自己的线程中运行的进程,可以在不阻塞的情况下启动/停止.这将最终进入Windows服务,但我现在在控制台应用程序中设置它,直到它完全充实.
在调用Start()之后,我希望主程序线程被阻塞,直到按下Ctrl-C.我知道这会奏效:
public static void Main(string[] args)
{
bool keepGoing = true;
var service = new Service();
System.Console.TreatControlCAsInput = false;
System.Console.CancelKeyPress += delegate(object sender, ConsoleCancelEventArgs e)
{
e.Cancel = true;
service.Stop();
keepGoing = false; // Break the while loop below
};
service.Start();
while( keepGoing )
{
Thread.Sleep(100); // 100 is arbitrary
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我发现标志和任意睡眠值令人烦恼.我知道while循环中的CPU成本几乎为0,但我宁愿有一个"硬"块,一旦完成Ctrl-C处理程序就会释放.我设计了下面的内容,使用信号量来阻止,直到完成匿名的Ctrl-C处理程序:
public static void Main(string[] args)
{
var service = new Service();
var s = new Semaphore(1, 1);
System.Console.TreatControlCAsInput = false;
System.Console.CancelKeyPress += delegate(object sender, ConsoleCancelEventArgs e) …Run Code Online (Sandbox Code Playgroud) 我已经将我的OWIN自托管Web Api 2应用程序配置为以https:// ...开头,并使用netsh将自签名SSL证书附加到我的应用程序.但是,从Fiddler,我仍然通过HTTPS频道看到明文.
OWIN需要特殊处理吗?
谢谢!
我在Visual Studio 2013中运行了ReSharper v8.2.1(Build 8.2.1000.4556).我只是注意到行为,如果我在方法的名称中加上下划线,"Inconsistent Naming"警告会完全消失.例如:
public void zzz()
{
// The ReSharper warning appears for this one, zzz()
}
public void zz_z()
{
// But not this one
}
Run Code Online (Sandbox Code Playgroud)
我只是将我的ReSharper设置重新设置为出厂默认值,以确保我没有其他干扰,并且相同的行为仍然存在.
我检查了"方法,属性和事件"(产生"zzz()"警告的有效设置)下的命名约定,并且名称样式设置为"UpperCamelCase",因为我一直都知道它.没有选择"下划线宽容"设置.
所以,问题是,这是一个新的"功能",我在某处错误地配置了某些东西,还是我错过了一些完全明显的东西?
有没有使用任何性能差异DateTime.Add(TimeSpan)对比DateTime.AddDays(double),DateTime.AddHours(double)等等?