Иллюстрация 1: некоторый код, переносящий сетевой вызов Async (не async
!) в Task
public static Task<byte[]> GetAsync(IConnection connection, uint id)
{
ReadDataJob jobRDO = new ReadDataJob();
//No overload of FromAsync takes 4 extra parameters, so we have to wrap
// Begin in a Func so that it looks like it takes no parameters except
// callback and state
Func<AsyncCallback, object, IAsyncResult> wrapped = (callback, state) =>
jobRDO.Begin(connection, 0, 0, id, callback, state);
return Task<byte[]>.Factory.FromAsync(wrapped, ar =>
{
ErrorCode errorCode;
UInt32 sError;
UInt32 attribute;
byte[] data = new byte[10];
jobRDO.End(out errorCode, out sError, out attribute, out data);
if(error != ErrorCode.NO_ERROR) throw new Exception(error.ToString());
return data;
}, jobRDO);
}
Установка .Net 4.5 (не указывая на него VS, и не перекомпиляция) прекращает эту работу. Обратный вызов никогда не вызывается.
Любые идеи, что может быть причиной этого, и в остальном, что я могу сделать, чтобы попытаться сузить основную причину проблемы или обойти ее?