Как я могу отключить сервер RSLinx OPC?

Я использую Clientace от Kepware для связи с RSLinx OPC Server. Но я не могу отключить RSLinx OPC Server. Когда я не использую Parallel.Foreach, я могу отключить сервер. Но, когда я использую Parallel.Foreach, я не могу отключиться. У меня нет ответа от Clientace of Kepware. Как я могу отключить сервер?

[code]
DaServerMgt daServerMgt = new DaServerMgt();
...
// Disconnect
daServerMgt.Disconnect(); <--- hanging when I use Parallel.Foreach to write value.

// Write
// I use Parallel code for Performance
Parallel.Foreach(tags, (tag) =>
{
    ...
    // itemIdentifiers / itemValues each has only one tag
    daServerMgt.Write(ref itemIdentifiers, itemValues);
    ...
});

/*
// itemIdntifiers / itemValues each has a lot of tags.
daServerMgt.Write(ref itemIdentifiers, itemValues);
*/

person HyoungWook Lee    schedule 20.08.2019    source источник


Ответы (1)


(У меня недостаточно очков репутации, поэтому я не могу добавить комментарий)

У меня был опыт, когда ClientAce ведет себя неожиданно при попытке одновременного подключения из разных потоков. У вас может быть такой же случай. Попробуйте отключить один за другим.

Попробуйте либо Task.ContinueWith, либо foreach с await (например, в этом ответе SO)

person show    schedule 06.12.2019
comment
Отсутствие представителя не дает вам права размещать комментарии здесь, в разделе «Ответ». Пожалуйста, удалите это. - person Rob; 07.12.2019