Мне нужно вызывать несколько Wcf-сервисов в асинхронном режиме, в настоящий момент я меняю их, и это слишком медленно, мне нужно вызвать их все сразу, а затем получить полные данные в BO.
Iниже приведен следующий код, который вызывает тот же метод при завершении, но, как вы можете видеть, есть проблемы с потоками, вызывающими один и тот же метод, он вызывает метод 25 раз, когда он должен быть только 5.
Inпредыдущий пример показал sepe
Не могли бы вы сказать мне, как заблокировать метод, чтобы только один поток мог использовать его одновременно, также допустимо ли использовать BackgroundWorkerProcess в моем классе, который является частьюПриложение MVC 2?
namespace WCFThreadingTest
{открытый частичный класс Form1: Form {public static int result = 0;
public Form1()
{
InitializeComponent();
Completed += (s, a) =>
{
// all complete, return to client.
MessageBox.Show(result.ToString());
auto.Close();
wrk.Dispose();
};
wrk.DoWork += (s, a) =>
{
Start();
};
wrk.RunWorkerAsync();
}
public event EventHandler Completed;
public AutoResetEvent auto = new AutoResetEvent(false);
private void Start()
{
auto.WaitOne();
Completed(this, EventArgs.Empty);
}
BackgroundWorker wrk = new BackgroundWorker();
private void button1_Click(object sender, EventArgs e)
{
ServiceReference1.Service1Client clien = new ServiceReference1.Service1Client();
for (int i = 0; i < 5; i++)
{
clien.GetDataCompleted += new EventHandler<GetDataCompletedEventArgs>(clien_GetDataCompleted);
clien.GetDataAsync(i);
}
}
public void clien_GetDataCompleted(object sender, GetDataCompletedEventArgs e)
{
result += e.Result;
auto.Set();
}
}
}