WCF サービス ライブラリのメソッド内でこのスレッドを実行しています。
以下のコードは、メソッドの最後に実行されます。これを行うのは、WCF からクライアントへの出力に影響を与えないバックグラウンド プロセスが完了するまでユーザーを待たせたくないからです。
私が今抱えている問題は、そのスレッドを実行してクライアントが応答を受け取ると、親スレッドが強制終了されることです。このスレッドも殺します。残りの操作を実行しながら、親スレッドがこのスレッドの終了を待機するようにするにはどうすればよいですか?
class Program
{
static void Main(string[] args)
{
Dictionary<string, string> sampleDict = getPopulatedDictionary();
var result = run(sampleDict);
}
public static int run(Dictionary<string, string> sampleDict_)
{
PerformCalculations(sampleDict_);
if (sampleDict_.Keys.Count > 10)
{
System.Threading.Tasks.Task.Factory.StartNew(() =>
{
backgroundprocess(sampleDict_);
});
}
//after returning i still want it to run
return sampleDict_.Keys.Count;
}
private static void backgroundprocess(Dictionary<string,string> dict)
{
foreach (var k in dict.Keys)
{
dict[k] = new Random().Next(2666).ToString();
}
}
}
要するに、このメソッドがそのスレッドを開始して値 X を返すようにしたいのですが、値を返した後にそのスレッドが終了するのを待ちます。