Я пытаюсь перенести двигатель в C # WP7 silverlight вместе с его юнит-тестами. Поскольку он использует http-запросы, он должен быть асинхронным, как того требует инфраструктура. Версия движка для Android, которую я портирую, использует синхронные блокирующие сокеты в рабочем потоке. Он вызывает обратный вызов всякий раз, когда завершается вся операция (не только запрос http).
Вопрос - как мне обернуть механизм обратного вызова, чтобы он выполнял асинхронный обратный вызов, который можно использовать в [асинхронном] модульном тесте?
Я хочу сделать что-то вроде этого:
using System;
using System.Net;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.Silverlight.Testing;
[TestClass]
public class WebRequestsTests : WorkItemTest
{
[TestMethod, Asynchronous]
public void TestWebRequest()
{
var webRequest = WebRequest.CreateHttp("http://www.stackoverflow.com");
webRequest.BeginGetResponse(result =>
{
EnqueueCallback(() =>
{
WebResponse response = webRequest.EndGetResponse(result);
// process response
TestComplete(); // async test complete
});
}, null);
}
}
Нужно ли реализовывать интерфейс IAsync или что-то подобное?
Я бы хотел, чтобы он делал что-то вроде этого:
using System;
using System.Net;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.Silverlight.Testing;
[TestClass]
public class WebRequestsTests : WorkItemTest
{
[TestMethod, Asynchronous]
public void TestWebRequest()
{
MyThread thread = new MyThread();
thread.Start(result =>
{
EnqueueCallback(() =>
{
WebResponse response = thread.EndGetResult(result);
// process response
TestComplete(); // async test complete
});
}, null);
}
}
Не уверен, что я тоже на 100% доволен лямбда-выражениями, так что, если они будут удалены, даже лучше! ;)
Спасибо