асинхронные методы

Пытаюсь перейти на использование асинхронных методов и не совсем понимаю что нужно передавать в качестве
параметров АsyncOperationCallback callback и Object userState. Из описания понятно, что это метод, возвращающий состояние асинхронного запроса. Но как правильно его реализовать?
Не могли бы привести пример вызова любого метода на С#, например
GetMeasurePointListAsync GetListAsync(MeasurePointType type,AsyncOperationCallback callback,Object userState)

С переходом на .NET 4.6 в версии R22, появилась возможность использовать async/await. Сейчас все новые методы пишутся под этот шаблон, к старым добавляются аналоги. Поэтому рекомендуем вам сразу начинать использовать новые методы возвращающие Task. Для вашего примера это будет метод:

public Task<MeasurePoint[]> GetListAsync();

И соответственно использовать данный метод необходимо следующим образом:

public async void Refresh();
{
	MeasurePoint[] measurePointList = await server.MeasurePoints.GetListAsync();
}

Также подобные вопросы по использованию новых операций уже обсуждались в некоторых темах:
http://forum.lers.ru/viewtopic.php?f=16&t=5205&p=35922&hilit=async#p35922
http://forum.lers.ru/viewtopic.php?f=16&t=5244&p=36360&hilit=async#p36360

Спасибо, этот метод я для примера брал. Как быть с методами, которые еще не обновили, но мне их нужно использовать. В частности
GenerateReportAsyncOperation. У него нет варианта возвращающего Task?

Такие асинхронные методы можно использовать двумя способами.

Первый, это в качестве “callback” передать название метода, который будет вызван по завершении асинхронной операции:

private void GetPreparedReport();
{
	this.reportManager.GenerateReportAsync(entityId, ReportEntity.Node, reportId, Lers.Data.DeviceDataType.Current, DateTime.Now.AddDays(-1), DateTime.Now, GetPreparedReportCallback, null);
}

private void GetPreparedReportCallback(AsyncOperation asyncOperation);
{
	GenerateReportAsyncOperation operation = (GenerateReportAsyncOperation)asyncOperation;

	DevExpress.XtraReports.UI.XtraReport report = operation.EndGenerate();
}

Либо в качестве “callback” написать анонимный метод:

private void GetPreparedReport();
{
	this.reportManager.GenerateReportAsync(entityId, ReportEntity.Node, reportId, Lers.Data.DeviceDataType.Current, DateTime.Now.AddDays(-1), DateTime.Now, 
				(asyncOperation) =>
				{
					GenerateReportAsyncOperation operation = (GenerateReportAsyncOperation)asyncOperation;

					DevExpress.XtraReports.UI.XtraReport report = operation.EndGenerate();
	}, null);
}

А в качестве “userState” вы можете передавать переменные, значения которых вы хотите получить в методе, который будет вызван после завершения асинхронной операции:

private void GetPreparedReport();
{
	List<int> elements;

	this.reportManager.GenerateReportAsync(entityId, ReportEntity.Node, reportId, Lers.Data.DeviceDataType.Current, DateTime.Now.AddDays(-1), DateTime.Now, GetPreparedReportCallback, elements);
}

private void GetPreparedReportCallback(AsyncOperation asyncOperation);
{
	List<int> elements = (List<int>)asyncOperation.UserState;
	
	GenerateReportAsyncOperation operation = (GenerateReportAsyncOperation)asyncOperation;

	DevExpress.XtraReports.UI.XtraReport report = operation.EndGenerate();
}

Спасибо Вам, теперь у меня все получилось.