A SELECT always takes locks on tables. In READ UNCOMMITTED, READ COMMITTED SNAPSHOT and SNAPSHOT isolation, that lock will be Sch-S, Schema Stability, which is the lightest lock you can take. The lock prevents the schema from changing, but no rows are locked.
ASYNC_NETWORK_IO means that the SQL Server is waiting for the client to pick up the result set. A poorly written client may have decided to take a holiday in Spain and come back three weeks later to read the remaining rows.
TRUNCATE TABLE is logically a DELETE operation, but physically, it's a kind of a half DROP TABLE. That is, it deallocates all pages for the table. It requires a Sch-M, schema-modification lock, which is the strongest lock you can take. And this lock is blocked by Sch-S.
In this particular sitaution, there are two options:
- Use DELETE rather than TRUNCATE TABLE. DELETE will not be blocked by that SELECT.
- Kill the SELECT query. (And with five hours and ASYNC_NETWORK__IO, I would be tempted to that.)