私はSQL AnywhereでトリガからURLをトリガしようとしていますが、レスポンスを待っていません。 SQLでSQL Anywhereから呼び出されたときにCLRからスレッドを開始しますか?
どこでも私は、次の機能があります。
CREATE FUNCTION "DBA"."sendCallback"(in @serverip text,in @url text)
returns char(255)
not deterministic
external name 'Callback.dll::Namspace.Callback.OpenUrlAsync(string, string) string' language CLR
そして、C#で、私は次のプログラムがあります
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Net;
using System.ComponentModel;
namespace Namspace
{
public static class Callback
{
public static string OpenUrlAsync(string server, string url)
{
try
{
Thread t1 = new System.Threading.Thread
(() =>
{
using (WebClient wc = new WebClient())
{
try
{
string result = wc.DownloadString(server + url);
}
catch (Exception ee)
{
Console.Error.WriteLine(ee.Message);
}
}
});
t1.Start();
}
catch (Exception e)
{
Console.Error.WriteLine(e.Message);
}
return "done";
}
}
}
を私はISQLからこれを呼び出すと、それは完璧に動作しますが、それがあるときにそれは呼び出しを行うことができます前にトレッドのようなloksトリガーから呼び出されます。
起動した後にt1.Join()
を追加すると、目的の効果が得られますが、トリガーから呼び出すまでに多くの時間がかかります。
それを呼び出す接続が終了したときにCLRが "teared down"になるのは正しいですか?
スレッドの終了を確認するにはどうすればよいですか?