Асинхронный метод на стороне клиента не продолжается после вызова WCF - PullRequest
0 голосов
/ 28 июня 2019

У меня есть библиотека контрактов, которая будет использоваться как клиентским приложением, так и сервисом WCF (повторно использовать существующую библиотеку).В этой библиотеке контрактов у меня есть асинхронный метод, который будет вызываться на стороне клиента.Когда я вызываю этот метод и пытаюсь вызвать WCF, пока его метод работает, WCF возвращает новый объект, и я теряю исходную ссылку на объект.Метод работает на другом объекте.Есть ли способ предотвратить потерю этой ссылки?Таким образом, можно продолжить вызов метода для того же объекта.

Библиотека контрактов:

[DataContract]
    public class ComVariable
    {
        [DataMember]
        public int ReadValue { get; set; }

        public async void WriteReadValue()
        {
            Console.WriteLine(this.ReadValue);

            await Task.Delay(5000);

            Console.WriteLine(this.ReadValue);
        }
    }

Метод обслуживания WCF:

public class Service1 : IService1
    {
        public ComVariable GetComVariable(ComVariable comVariable)
        {
            //Complex reading algorithm from some device
            comVariable.ReadValue++;
            return comVariable;
        }
    }

Сторона клиента:

static void Main(string[] args)
        {
            ComVariable comVariable = new ComVariable();
            comVariable.ReadValue = 1;

            comVariable.WriteReadValue();

            Service1Client service1Client = new Service1Client();
            comVariable = service1Client.GetComVariable(comVariable);

            Console.Read();
        }

Я хочу видеть 1 и 2 на экране консоли, но асинхронный метод старого объекта comVariable не зависит от вызова веб-службы.Но на консоли записывается 1 и 1.

Я могу просто выровнять свойства объектов после вызова wcf:

comVariable.ReadValue = service1Client.GetComVariable(comVariable).ReadValue;

Это будет работать, но я не хочу этого делать, потому что ябудет иметь список и класс ComVariable будет иметь так много свойств, которые должны быть выравнены.

...