protected override async Task<Lease> AcquireLease()
        {
            using (var connection = new SqlConnection(settings.ConnectionString))
            {
                await connection.OpenAsync();

                var cmd = connection.CreateCommand();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = @"Alluvial.AcquireLease";
                cmd.Parameters.AddWithValue(@"@waitIntervalMilliseconds", waitInterval.TotalMilliseconds);
                cmd.Parameters.AddWithValue(@"@leaseDurationMilliseconds", defaultLeaseDuration.TotalMilliseconds);
                cmd.Parameters.AddWithValue(@"@scope", scope);

                using (var reader = await cmd.ExecuteReaderAsync())
                {
                    while (await reader.ReadAsync())
                    {
                        var resourceName = await reader.GetFieldValueAsync<string>(0);
                        var leaseLastGranted = await reader.GetFieldValueAsync<dynamic>(2);
                        var leaseLastReleased = await reader.GetFieldValueAsync<dynamic>(3);
                        var token = await reader.GetFieldValueAsync<dynamic>(5);

                        var resource = new LeasableResource(
                            resourceName,
                            defaultLeaseDuration)
                        {
                            LeaseLastGranted = leaseLastGranted is DBNull
                                ? DateTimeOffset.MinValue
                                : (DateTimeOffset) leaseLastGranted,
                            LeaseLastReleased = leaseLastReleased is DBNull
                                ? DateTimeOffset.MinValue
                                : (DateTimeOffset) leaseLastReleased
                        };

                        Lease lease = null;
                        lease = new Lease(resource,
                                          resource.DefaultLeaseDuration,
                                          (int) token,
                                          extend: by => ExtendLease(lease, @by));
                        return lease;
                    }
                }

                return null;
            }
        }
 public SqlBrokeredStreamQueryDistributor(
     LeasableResource[] leasableResources,
     SqlBrokeredStreamQueryDistributorDatabase settings,
     string scope,
     int maxDegreesOfParallelism = 5,
     TimeSpan? waitInterval = null,
     TimeSpan? defaultLeaseDuration = null)
     : base(leasableResources, maxDegreesOfParallelism, waitInterval)
 {
     if (settings == null)
     {
         throw new ArgumentNullException("settings");
     }
     if (scope == null)
     {
         throw new ArgumentNullException("scope");
     }
     this.settings = settings;
     this.scope = scope;
     this.defaultLeaseDuration = defaultLeaseDuration ?? TimeSpan.FromMinutes(5);
 }