Обработка исключений, организация очередей и синхронизация пользовательского интерфейса для служб WCF с использованием CCR

чаю, как использовать CCR (параллелизм и координационную среду выполнения) в сочетании с асинхронной веб-службой WCF.

Это тестовая служба WCF:

    public class Service : IService
    {
        private Accounts.Manager accountManager = new Accounts.Manager();
        public IAsyncResult BeginGetAccount(int id, AsyncCallback callback, object state)
        {
            //How Do I Call the CCR Function without blocking a Thread?
            throw new NotImplementedException();
        }

        public string EndGetAccount(IAsyncResult result)
        {
            //How Do I Finish the Call and Pass back the Result?
            throw new NotImplementedException();
        }
    }

Он возьмет идентификационный номер и вернет соответствующее имя учетной записи (если есть)

Я написал функцию CCR, которая должна находить подходящие учетные записи (и) (очевидно, нужно много работать - это просто доказательство концепции). Здесь я отклеиваюсь.

Как передать результаты обратно (глобальный порт?) И, что более важно, как подключить CCR к асинхронному вызову службы WCF, не блокируя поток?

public IEnumerator<ITask> GetAccount(int id)
    {
        SqlDataReader reader = null; 
        SqlConnection connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=BizData;Integrated Security=True;Async=True;"); 
        string query = "SELECT * FROM Account WHERE AccountID = @AccountID"; 
        SqlCommand command = new SqlCommand(query, connection);
        SqlParameter accountID = new SqlParameter("AccountID", id);
        command.Parameters.Add(accountID);

        connection.Open(); 
        yield return Arbiter.Choice(SQLAdapter.GetReader(command), 
            delegate(SqlDataReader r) { reader = r; }, 
            delegate(Exception e) { Console.Write("Failed to get SQL data"); }); 

        if (reader == null) yield break;       

        while (reader.Read())       
        {
            Account account = new Account { ID = Convert.ToInt32(reader["AccountID"]), 
                Name = reader["Account"].ToString(), 
                ParkingNo = Convert.ToInt32(reader["ParkingNo"]), 
                Password = reader["Password"].ToString() };
            //Post account?
        }
        connection.Close(); 
    }

Ответы на вопрос(2)

Ваш ответ на вопрос