Making async SQL calls
Your code does not follow naming conventions (private fields should be camelCased, and usually have an underscore prefix; parameters should be camelCased)
there is no need in private properties, use fields instead (ConnectionString)
It is not an asynchronous version of SQL access, it is multithreaded access. The difference is that you don't necessarily need to span new threads (and you should not, in fact) to make your code asynchronous.
Stopping a thread using Thread.Abort is discouraged, and in general is very dangerous as it may lead to leaked resources and a lot of other side effects. It was explained in a lot of places, e.g. How To Stop a Thread in .NET (and Why Thread.Abort is Evil)
Killing a previous SQL action upon running the new one is the best way to get random issues all over your application
You don't provide any means to control the execution of asynchronous request, so calling code has no idea whether SQL finished execution
And finally, AsyncSqlCall&lt;T&gt; method should not have Action&lt;T&gt; Callback parameter as it is a continuation action, you should return Task&lt;T&gt; instead (so that caller can add a continuation)


I don't like custom ORMs and would suggest you to use Entity Framework or NHibernate as a data layer, but as an exercise here are the fixes I would apply (.NET 4.5):

public class SqlAsync
{
    private readonly string _connectionString;
    public int Timeout { get; set; }

    public SqlAsync(string connstring)
    {
        _connectionString = connstring;
        Timeout = 30;
    }

    public Task&lt;T&gt; AsyncSqlCall&lt;T&gt;(string sp, Func&lt;SqlDataReader, Task&lt;T&gt;&gt; handleResult, Dictionary&lt;string, object&gt; parameters = null)
    {
        return AsyncSqlCall&lt;T&gt;(sp, (reader, token) =&gt; handleResult(reader), CancellationToken.None, parameters);
    }

    public async Task&lt;T&gt; AsyncSqlCall&lt;T&gt;(string sp, Func&lt;SqlDataReader, CancellationToken, Task&lt;T&gt;&gt; handleResult, CancellationToken cancellationToken, Dictionary&lt;string, object&gt; parameters = null)
    {
        using (SqlConnection conn = new SqlConnection(_connectionString))
        using (SqlCommand cmd = new SqlCommand(sp, conn))
        {
            cmd.CommandTimeout = Timeout;
            cmd.CommandType = CommandType.StoredProcedure;

            if (parameters != null)
            {
                foreach (KeyValuePair&lt;string, object&gt; kvp in parameters)
                    cmd.Parameters.AddWithValue(kvp.Key, kvp.Value ?? DBNull.Value);
            }

            await conn.OpenAsync(cancellationToken);

            using (SqlDataReader rdr = await cmd.ExecuteReaderAsync(cancellationToken))
                return await handleResult(rdr, cancellationToken);
        }
    }
}