如何使用并行编程通过并行调用一次调用多个函数
本文关键字:调用 并行 一次 函数 编程 何使用 | 更新日期: 2023-09-27 18:07:13
我有一个这样的WPF应用程序。
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public delegate void NextPrimeDelegate();
int i = 0;
public MainWindow()
{
InitializeComponent();
}
public void CheckNextNumber()
{
i++;
textBox1.Text= i.ToString();
Dispatcher.BeginInvoke(
System.Windows.Threading.DispatcherPriority.SystemIdle,
new NextPrimeDelegate(this.CheckNextNumber));
}
private void button1_Click(object sender, RoutedEventArgs e)
{
Dispatcher.BeginInvoke(
DispatcherPriority.Normal,
new NextPrimeDelegate(CheckNextNumber));
}
}
上面的代码工作没有问题。我的问题是:如何使用并行编程,通过使用并行调用一次调用多个函数?
例如:I have to make something like this.
tr[0].Start();
tr[0].Stop();
我不能将您附加的代码示例与您的问题联系起来,但我会回答您的问题。Parallel.Invoke()
接受一个可变长度的lambdas(内联函数)列表作为其参数。它并行调用/执行所有lambda,并阻塞执行,直到所有lambda执行完成。例如:
Parallel.Invoke( () => Thread.Sleep(500), () => Thread.Sleep(1500), () => Thread.Sleep(200));
这将一次调用所有这三个函数(() => ...
是一个内联声明的函数,它不接受参数,并返回后面的单个表达式的结果)和阻塞(意味着执行将不会继续超过调用者线程的那个点),直到所有这三个函数都完成执行。在本例中是Parallel。调用将花费1500毫秒,因为运行时间最长的函数是第二个函数,它在返回之前等待1500毫秒。
我不太确定你想用你的示例代码说明什么,但如果你想并行运行Start()和Stop()(再次,不明白为什么你会),你可以做一些像Parallel.Invoke(tr[0].Start(), tr[0].Stop())