【发布时间】:2015-09-10 06:38:46
【问题描述】:
我有一个单向 WCF 服务,它调用一个打开 4 个线程并返回的方法。 让线程执行一些工作。
[OperationContract(IsOneWay=true)]
[WebInvoke(Method = "POST",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "CalcinBackGround")]
public void CalcinBackGround(string somedata)
{
CallAllWork(somedata);
DoSomeOtherWork();
}
string CallAllWork(string somedata)
{
Exception exc1 = null, exc2 = null, exc3 = null, exc4 = null;
Thread thr1 = new Thread(() => SafeExecute(() => DoSomeWork1(new object[] {somedata}), out exc1));
Thread thr2 = new Thread(() => SafeExecute(() => DoSomeWork2(new object[] {somedata}), out exc2));
Thread thr3 = new Thread(() => SafeExecute(() => DoSomeWork3(new object[] {somedata}), out exc3));
Thread thr4 = new Thread(() => SafeExecute(() => DoSomeWork4(new object[] {somedata}), out exc4));
thr1.Start();
thr2.Start();
thr3.Start();
thr4.Start();
return "Done";
}
private static void SafeExecute(Action test, out Exception exception)
{
exception = null;
try
{
test();
}
catch (Exception ex)
{
exception = ex;
}
}
从代码中可以看出, 我刚刚启动线程并从方法返回以执行一些其他操作。
这是让它们保持打开状态而不等待它们完成的好方法(因为它以单向服务工作。)还是有任何其他方法可以实现这一点?
为了清晰:我完全不关心线程中正在完成的工作,所以等待他们 完成对我来说毫无意义。
【问题讨论】:
-
既然是单向服务,何不等他们完成呢?没有人会注意到。
-
等待它完成意味着我无法进行其他不依赖于结果的任务。 (DoSomeOtherWork)
-
当然可以。只需等待在您完成所有其他工作之后的线程。
-
您是否在 IIS 中托管?
标签: c# multithreading wcf