【问题标题】:BLToolkit - is it able to make async database operation?BLToolkit - 它能够进行异步数据库操作吗?
【发布时间】:2013-08-16 12:03:17
【问题描述】:

我想避免因数据库读取慢而阻塞执行线程,我非常喜欢BLToolkit DataAccessor

public abstract class PersonAccessor : DataAccessor
{
    [SqlText(@"SELECT * FROM Person WHERE FirstName = @firstName")]
    public abstract List<Person> GetPersonListByFirstName(string @firstName);

    [SprocName("sp_GetPersonListByLastName")]
    public abstract List<Person> GetPersonListByLastName(string @lastName);
}

BLToolkit DataAccessor 是否可以使用异步操作?

希望它能够返回 Task&lt;T&gt; 并且我可以使用 C# 5.0 中的 await

兄弟。

【问题讨论】:

    标签: bltoolkit


    【解决方案1】:

    您可以像这样将提供 Begin End 模式的 Async 属性和 turn it into Task 组合起来(未测试):

    public abstract class PersonAccessor : DataAccessor
    {
        [SqlText(@"SELECT * FROM Person WHERE FirstName = @firstName")]
        public abstract List<Person> GetPersonListByFirstName(string @firstName);
    
        [Async]
        public abstract IAsyncResult BeginGetPersonListByFirstName(string @firstName, AsyncCallback callback, object state);
    
        [Async]
        public abstract List<Person> EndGetPersonListByFirstName(IAsyncResult asyncResult);
    
        public Task<List<Person>> GetPersonListByFirstNameAsync(string @firstName)
        {
            return Task.Factory.FromAsync(
                BeginGetPersonListByFirstName(),
                EndGetPersonListByFirstName,
                @firstName, 
                null);
        }
    }
    
    public class TestClass 
    {
        public List<Person> AwaitTest(PersonAccessor personAccessor, string @firstName)
        {
            return await personAccessor.GetPersonListByFirstNameAsync(@firstName);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 2016-12-08
      • 1970-01-01
      • 2019-05-18
      • 2018-05-08
      相关资源
      最近更新 更多