По поводу "что за фингя" - это нормально. Дело в том, что за передаваемые по сети данные отвечает только тип double, а Task - это лишь способ вызова (синхронный или асинхронный).
Можно поискать в настройках Service Reference ключик, который отвечает за генерацию интерфейсов обратного вызова. Я точно не помню, можно ли этим управлять.
Другой вариант, на случай если не найдете - просто исправьте double на Task<double> вручную.