internal partial class RavenService : ServiceBase
{
private RavenDbServer server;
private Task startTask;
public RavenService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
//单独开启一个线程启动服务
startTask = Task.Factory.StartNew(() =>
{
try
{
server = new RavenDbServer(new RavenConfiguration());
}
catch (Exception e)
{
EventLog.WriteEntry("RavenDB service failed to start because of an error" + Environment.NewLine + e, EventLogEntryType.Error);
Stop();
}
});
//等待20秒还没有启动则提示
if(startTask.Wait(TimeSpan.FromSeconds(20)) == false)
{
EventLog.WriteEntry(
"Startup for RavenDB service seems to be taking longer than usual, moving initialization to a background thread",
EventLogEntryType.Warning);
}
}
protected override void OnStop()
{
//异步等待销毁服务
startTask.ContinueWith(task =>
{
if (server != null)
server.Dispose();
return task;
}).Wait();
}
}
RavenDb中的Task异步应用.Net4
原创
©著作权归作者所有:来自51CTO博客作者草宝虫啊的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
自制的 .net framework 强命名工具(支持.net4)
我们知道,以前在Windows下开发程序时常会遭遇著名的“DLL Hell”问题,即动态链接库的向后编译有可能破坏Guid从而导致原来引用此COM组件的程序
.net 工具 microsoft windows dll -
Rx:4-[编外篇] .NET4里的Concurrent Collections
Rx可以在3.5里用,他带给了3.5可以使用的支持并发的集合类型,说白了,就
.net 互联网 Exchange thread 多线程 -
RavenDB中的递归索引
project-x - > team-nati groups)。从这篇文章...
递归 RavenDB Max