Как реализовать мгновенную фильтрацию DataGrid'a, используя многопоточность (WPF)?
Вам не нужно для фильтрации пересобирать коллекцию. Для этого в wpf уже разработаны нужные механизмы.
В первую очередь нужно коллекцию с которой вы работаете поместить в CollectionView. CollectionView привязать к DataGrid. 
У CollectionView есть встроенные механизмы фильтрации — результат будет отображаться в DataGrid.
См. Свойство Filter CollectionView.
Для использования CollectionView обёртывается ещё в CollectionViewSource или что-то подобное. Это подробно описывается в примерах. Его можно просто описать даже в Xaml.
Пример, примерного кода с динамическим созданием CollectionViewSource над List и фильтрацией через TextBox:
Xaml<Window x:Class="WpfApplication3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">    
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="47*"/>
            <RowDefinition Height="275*"/>
        </Grid.RowDefinitions>
        <TextBox x:Name="filter" TextChanged="filter_TextChanged"/>
        <ListBox x:Name="lst" Grid.Row="1" />
    </Grid>
</Window>
C#public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        List<string> lstSource = new List<string>() { "1", "2","3" };
        viewSource = new CollectionViewSource();
        viewSource.Source = lstSource;            
        viewSource.Filter += viewSource_Filter;
        lst.ItemsSource = viewSource.View;
    }

    CollectionViewSource viewSource;
    void viewSource_Filter(object sender, FilterEventArgs e)
    {
        e.Accepted = ((string)e.Item).IndexOf(filter.Text) >=0;
    }

    private void filter_TextChanged(object sender, TextChangedEventArgs e)
    {
        viewSource.View.Refresh();
    }
}
Видимо, вы неправильно готовите асинхронные таски. Возможно это поможет.