我正在尝试从 SQL Anywhere 中的触发器触发 url,而不是等待响应。
在 SQL Anywhere 中,我具有以下功能:
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 调用它时,它工作得很好,但是当它从触发器调用时,它看起来就像在调用之前胎面被中止了。
如果我t1.Join()
在它启动后添加,我会得到想要的效果,但是它需要很长时间才能从触发器中调用。
当调用它的连接完成时,CLR 被“拆除”是否正确?
如何确保线程完成?