1.线程池
protected void Page_Load(object sender, EventArgs e)
{
System.Threading.WaitCallback waitCallback = new WaitCallback(MyWork);
ThreadPool.QueueUserWorkItem(waitCallback, "第一个线程");
}
public static void MyWork(object state)
{
//执行代码
}
2.
Thread th = new Thread(delegate()
{
//执行代码
});
th.Start();
while (true)
{
if (th.ThreadState != ThreadState.Stopped)
continue;
break;
}
th.Abort();
3.
GatherDelegate delegate1 = delegate()
{
//执行抓取方法;
for (int i = 0; i < count; i++)
{
lock (this)
{
num1 += 1;
}
}
};
IAsyncResult result1 = delegate1.BeginInvoke(null, null);
delegate1.EndInvoke(result1);
我想请教一些 这几种方法的 优点和缺点在那里 发邮件适合哪一种???
我会选择第三种
第一种:只能使用无返回值方法,无法对结果进行处理
第二种:打开新的工作线程,需要较大代价,只使用极短时间没有必要
第三种:个人感觉比较好,执行完成后可以回调处理结果。如下代码:
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("start");
sendMessageDelegate action = new sendMessageDelegate(sendMessage); //实例化委托
object param="end";
for (int i = 0; i < 10; i++)
{
action.BeginInvoke(string.Concat(param,i), new AsyncCallback(sendCallback), action); //异步执行
}
Console.ReadLine();
}
delegate object sendMessageDelegate(object message);//申明委托
public static void sendCallback(IAsyncResult asyncResult) //异步回调函数
{
sendMessageDelegate action = (sendMessageDelegate)asyncResult.AsyncState;
object result = action.EndInvoke(asyncResult); //执行完成对结果处理
// 对结果进行处理
Console.WriteLine(result);
}
public static object sendMessage(object message) //执行函数,注意线程安全
{
Console.WriteLine("send");
//执行代码
return message;
}
}
}
1,3实质是一样的,都是使用线程池处理,2是独立自己开的线程。
发邮件的话还是得看以具体的需求,这几种方案也都能做到。只是第二种要灵活一些:)