J'essaie de déclencher une URL à partir d'un déclencheur dans SQL Anywhere et de ne pas attendre la réponse.Démarrer un thread à partir de CLR lorsqu'il est appelé à partir de SQL Anywhere?
Dans SQL Anywhere I ont la fonction suivante:
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
Et en C# J'ai le programme suivant:
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";
}
}
}
Quand j'appelle cela de ISQL cela fonctionne parfaitement, mais quand il est appelé à partir du déclencheur, il loks comme la bande de roulement est avorté avant de pouvoir faire l'appel.
Si j'ajoute t1.Join()
après avoir démarré, j'obtiens l'effet désiré, mais il faut beaucoup de temps pour être appelé depuis un déclencheur.
Est-il correct que le CLR soit "abattu" lorsque la connexion appelant est terminée?
Comment puis-je m'assurer que le filetage est terminé?