110,534
社区成员
发帖
与我相关
我的任务
分享
按这个思路,请问还要用多线程干什么?直接单线程得了 这个就是多线程时当线程反复执行最后很可能产生垃圾数据,你需要做的是每个线程都要进行判断是否是破解的验证码,但是这样9个if程序是慢的,然后就是多线程运行时,那么这9个线程,只允许同一时间运行一个,其余的暂停,当1线程将1-1999运行完了自动释放空间让下一个线程进入运行
这个就是多线程时当线程反复执行最后很可能产生垃圾数据,你需要做的是每个线程都要进行判断是否是破解的验证码,但是这样9个if程序是慢的,然后就是多线程运行时,那么这9个线程,只允许同一时间运行一个,其余的暂停,当1线程将1-1999运行完了自动释放空间让下一个线程进入运行
[quote=引用 5 楼 wanghui0380 的回复:]
var b=Task.WaitAny(task1,task2)
var res=await b
这代码是等待第一个任务完成,至于后续任务虽然继续执行,但忽略返回
task1这个可以是
task<int> mytask(list<int> list)
{
await Task.Yield();
var tcs = new TaskCompletionSource<bool>();
Task.Run(() =>
{
foreach(var item in list)
{
if(check(item)) //check方法就是你去检查的代码,这个你直接完成
{
tcs.SetResult(item); //检查成功异步返回
}
}
});
tcs.Task.Wait(); //同步等待完成 ,这里其实也可以直接返回tcs.task
}
当然这只是其中一种简便的完成方式。其实也还有利用 CancelTokenSource 的控制,任何一个优先完成后,直接把CancelTokenSource Cancel掉就行。或者采用信号量控制也是ok的
[quote=引用 7 楼 abinsoft110 的回复:]
[quote=引用 2 楼 娃都会打酱油了 的回复:]
加个全局变量,所有线程都会判断这个值不就行了
[quote=引用 4 楼 caozhy 的回复:]
每个线程一个循环,每次循环判断一个 event 是否被设置,设置了,就终止循环
var b=Task.WaitAny(task1,task2)
var res=await b
这代码是等待第一个任务完成,至于后续任务虽然继续执行,但忽略返回
task1这个可以是
task<int> mytask(list<int> list)
{
await Task.Yield();
var tcs = new TaskCompletionSource<bool>();
Task.Run(() =>
{
foreach(var item in list)
{
if(check(item)) //check方法就是你去检查的代码,这个你直接完成
{
tcs.SetResult(item); //检查成功异步返回
}
}
});
tcs.Task.Wait(); //同步等待完成 ,这里其实也可以直接返回tcs.task
}
当然这只是其中一种简便的完成方式。其实也还有利用 CancelTokenSource 的控制,任何一个优先完成后,直接把CancelTokenSource Cancel掉就行。或者采用信号量控制也是ok的
每个线程一个循环,每次循环判断一个 event 是否被设置,设置了,就终止循环
加个全局变量,所有线程都会判断这个值不就行了
var b=Task.WaitAny(task1,task2)
var res=await b
task<int> mytask(list<int> list)
{
await Task.Yield();
var tcs = new TaskCompletionSource<bool>();
Task.Run(() =>
{
foreach(var item in list)
{
if(check(item)) //check方法就是你去检查的代码,这个你直接完成
{
tcs.SetResult(item); //检查成功异步返回
}
}
});
tcs.Task.Wait(); //同步等待完成 ,这里其实也可以直接返回tcs.task
}