异步或多线程支持一个任务执行完成
2013-04-10 11:27
393 查看
贴一个简单的代码
1:多线程
public class Class1
{
public Class1()
{
Timer timer = new Timer();
timer.Enabled = true;
timer.Interval = 500;
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
Console.Read();
}
int n = 0;
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
n++;
System.Threading.Thread t = new System.Threading.Thread(
new System.Threading.ParameterizedThreadStart(newThread));
t.Name = n.ToString();
t.Start(n);
}
void newThread(object n)
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("n=" + n + " => i=" + i + "");
System.Threading.Thread.Sleep(1000);
}
Console.WriteLine("线程" + System.Threading.Thread.CurrentThread.Name + "结束");
System.Threading.Thread.CurrentThread.Abort();
System.Threading.Thread.CurrentThread.Join();
}
}
2:委托
public class Class2
{
public Class2()
{
Timer timer = new Timer();
timer.Enabled = true;
timer.Interval = 500;
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
Console.Read();
}
int n = 0;
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
n++;
Working(n);
}
private delegate void DelegateReceiveData(int n);
private void CallBackMethod(IAsyncResult ar)
{
try
{
DelegateReceiveData dn = (DelegateReceiveData)ar.AsyncState;
dn.EndInvoke(ar);
}
catch (Exception ex)
{
}
}
private void ReceiveData(int n)
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("n=" + n + " => i=" + i + "");
System.Threading.Thread.Sleep(1000);
}
}
protected void Working(int n)
{
DelegateReceiveData dn = new DelegateReceiveData(ReceiveData);
AsyncCallback acb = new AsyncCallback(CallBackMethod);
IAsyncResult iar = dn.BeginInvoke(n, acb, dn);
}
}
结果:
1:多线程
public class Class1
{
public Class1()
{
Timer timer = new Timer();
timer.Enabled = true;
timer.Interval = 500;
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
Console.Read();
}
int n = 0;
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
n++;
System.Threading.Thread t = new System.Threading.Thread(
new System.Threading.ParameterizedThreadStart(newThread));
t.Name = n.ToString();
t.Start(n);
}
void newThread(object n)
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("n=" + n + " => i=" + i + "");
System.Threading.Thread.Sleep(1000);
}
Console.WriteLine("线程" + System.Threading.Thread.CurrentThread.Name + "结束");
System.Threading.Thread.CurrentThread.Abort();
System.Threading.Thread.CurrentThread.Join();
}
}
2:委托
public class Class2
{
public Class2()
{
Timer timer = new Timer();
timer.Enabled = true;
timer.Interval = 500;
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
Console.Read();
}
int n = 0;
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
n++;
Working(n);
}
private delegate void DelegateReceiveData(int n);
private void CallBackMethod(IAsyncResult ar)
{
try
{
DelegateReceiveData dn = (DelegateReceiveData)ar.AsyncState;
dn.EndInvoke(ar);
}
catch (Exception ex)
{
}
}
private void ReceiveData(int n)
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("n=" + n + " => i=" + i + "");
System.Threading.Thread.Sleep(1000);
}
}
protected void Working(int n)
{
DelegateReceiveData dn = new DelegateReceiveData(ReceiveData);
AsyncCallback acb = new AsyncCallback(CallBackMethod);
IAsyncResult iar = dn.BeginInvoke(n, acb, dn);
}
}
结果:
相关文章推荐
- 怎样在异步任务执行完成后就可以获取执行结果
- C# 多线程协同完成一个任务
- iOS 如何巧妙解决“一个任务需要等待另外一个任务完成后才可以执行”的问题
- 如何在asp.net中使用多线程及队列,异步处理一个耗时的任务(原创)
- 分享一个异步任务在遇到IO异常时支持递归回调的辅助方法
- quartz在job间隔期间内,保证上一个任务执行完后,再去调度下一个任务(转),在多线程情况下的问题
- 等待几个异步任务都完成后在执行其他的操作
- java异步执行任务,结合多线程线程池
- FutureTask的cancel方法真的能停止掉一个正在执行的异步任务吗
- java并发编程--Executor框架(一) 摘要: Eexecutor作为灵活且强大的异步执行框架,其支持多种不同类型的任务执行策略,提供了一种标准的方法将任务的提交过程和执行过程
- 在完成一个异步任务后取消剩余任务(C#)
- 启动一个异步线程去执行一个任务
- android异步任务完成后再执行主线程任务
- 多线程线程池控制一个方法的并发量 限制只有5个线程执行任务
- 使用Promise和async-await实现的一个异步遍历+同步执行任务的实例
- C# 多线程协同完成一个任务
- 使用管道流和多线程完成以下任务要求: 一个线程对象t1 会从控制台中不停的读取信息,读到之后把数据交给管道输出流,把数据写到管道里面 ,另一个线程对象t2 不停的使用管道输入流从管道
- Android AsyncTask实现异步任务的执行
- 推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler
- java 异步执行任务,返回进度